A明显的进位的就是遍历最低位

我们只需要从最后面开始往前走找到不是0的就可以了,统计0的个数然,找到不是0的直接用10-去这个数就可以了

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
typedef long long LL;
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N=1000010,M=1010,F=2*N,INF=0x3f3f3f3f,pp=133331;
const double pai=acos(-1.0);// pai
map<int,int> q;
int t,n,m;
string s;
void solve()
{cin>>s;reverse(s.begin(),s.end());n=s.size();int ans=0,cnt=0,f=0;for(int i=0;i<n;i++){if(s[i]=='0') cnt++;else {f=s[i]-'0';break;}}ans=pow(10,cnt)*(10-f);cout<<ans<<endl;return ;
}int main ()
{ios// 不能有printf puts scanfcin>>t;while(t--)solve();return 0;
}

直接结合样例就很简单了

B题看起来十分简单其实暗藏玄机

只需一句话你就明白了当a==b的时候,如果a中有重复字母那也可以交换

比如    aac   aac

这是yes 而   abc  abc 由于无法一次交换 所以无解

这件事情告诉我们看到不是合理的简单题不要太急,特别是注意看榜,有很多人错了就一定要再多思考

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int N=1000010,M=1010,F=2*N,INF=0x3f3f3f3f,pp=13331;
const double pai=acos(-1.0);// pai
int t,n,m;
string a,b;
int c[30];
void solve()
{cin>>n>>a>>b;int l=0,r=0,cnt=0;for(int i=0;i<n;i++){if(a[i]!=b[i]&&!cnt) l=i;if(a[i]!=b[i]&&cnt) r=i;if(a[i]!=b[i]) cnt++;}for(int i=0;i<n;i++){c[a[i]-'a']++;}if(a==b){for(int i=0;i<26;i++){if(c[i]>=2){cout<<"YES"<<endl;return ;}}cout<<"NO"<<endl;return ;}if(cnt!=2){cout<<"NO"<<endl;return ;}if(cnt==2){swap(a[l],a[r]);if(a==b){cout<<"YES"<<endl;return ;}cout<<"NO"<<endl;}return ;
}
// 万事读题为先
int main ()
{ios// 不能有printf puts scanfsolve();return 0;
}

C题对式子推导

对kx<=m 时ky<=m  以及 kx>m时ky>m这个式子进行变形

对这个式子变形之后可以解出 kx<=m 时k的值  k=m/x这个同时 是分界线 那么大于的就是k+1

也就是再进行一遍等价变化回去就可以得到答案了

当然如果你一下判断边界比较迷糊的话我这有一份我自己写的憨批代码可以看看

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
typedef long long LL;
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N=1000010,M=1010,F=2*N,INF=0x3f3f3f3f,pp=133331;
const double pai=acos(-1.0);// pai
map<int,int> q;
LL t,n,m,x;void solve()
{cin>>m>>x;LL ans=m/x+1,ans1=m/x;LL l=0,r=1e9+1;while(l<r){int mid=l+r+1>>1;if(ans1*mid>m) r=mid-1;else l=mid;}int y=m/ans+1;cout<<l-y+1<<endl;return ;
}int main ()
{ios// 不能有printf puts scanfcin>>t;while(t--)solve();return 0;
}

D题扩展欧几里得加上性质判断

由此我们可以知道如果对于

ax+by=c  c如果不是gcd(a,b)的倍数的话明显无解

扩展欧几里得的板子

LL exgcd(LL a,LL b,LL &x,LL &y)
{if(!b){x=1,y=0;return a;}LL d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}

然后这个是啥呢这个是满足条件的一组解

 cin>>a>>b>>n>>l>>r;LL ans=gcd(a,b),res=lcm(a,b);if(n%ans){cout<<"NO"<<endl;return ;}LL x,y;LL tt=res/a;exgcd(a,b,x,y);x*=n/ans,y*=n/ans;

注意是一组解

如果此时已经在范围那是好的

  if(x>=l&&x<=r){cout<<"YES"<<endl;return ;}

由此我们可以得出核心  就是用一个特解 解出满足条件的解

回归题意

b虽然可以左右走但是(b开局右走同理a不会超出范围(题意))

也就是说如果有解必然是

a*x+b*y=c;

那么我们求出一组特解之后呢?

也就是说我们如何让a的系数变到[l,r]的范围呢

我们要想如果要变化a的系数同时b也可以满足系数变化使得答案有解那么所移动的步数必然是

h, h=`lcm(a,b)/a 不然不会满足b的系数

这里再稍作解释

由于我们已经找到了一组解

如果说 要对a的系数变化  那么他变化的值一定来自于b的系数

也就是要维持有解的话

x*a变化的值也一定是 b的倍数

那么最小就是lcm(a,b);

对应到a的系数变化上就是lcm(a,b)/a

由此这个题结果得出

如果解出的x<l

要让x到  [l,r] 第一个大于l的解

那么就是这个步骤  最后判断跳了之后是否小于r是的话就是有解 不然没解

if(x<l){if((l-x)%tt==0){cout<<"YES"<<endl;return ;}LL ll=(l-x)/tt*tt+tt+x;if(ll<=r){cout<<"YES"<<endl;return ;}}

如果大于r同理 这里不在赘述

最后就是AC代码了

有点丑陋不过相信你肯定可以理解嘻嘻

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
typedef long long LL;
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N=1000010,M=1010,F=2*N,INF=0x3f3f3f3f,pp=133331;
const double pai=acos(-1.0);// pai
map<int,int> q;
LL t,n,m;
LL gcd(LL a,LL b)
{return b?gcd(b,a%b):a;
}LL exgcd(LL a,LL b,LL &x,LL &y)
{if(!b){x=1,y=0;return a;}LL d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}
LL lcm(LL a,LL b)
{return a/gcd(a,b)*b;
}
LL a,b,l,r;
void solve()
{cin>>a>>b>>n>>l>>r;LL ans=gcd(a,b),res=lcm(a,b);if(n%ans){cout<<"NO"<<endl;return ;}LL x,y;LL tt=res/a;exgcd(a,b,x,y);x*=n/ans,y*=n/ans;if(x>=l&&x<=r){cout<<"YES"<<endl;return ;}if(x<l){if((l-x)%tt==0){cout<<"YES"<<endl;return ;}LL ll=(l-x)/tt*tt+tt+x;if(ll<=r){cout<<"YES"<<endl;return ;}}if(x>r){if((x-r)%tt==0){cout<<"YES"<<endl;return ;}LL rr=x-(x-r)/tt*tt-tt;if(l<=rr){cout<<"YES"<<endl;return ;}}cout<<"NO"<<endl;return ;
}int main ()
{ios// 不能有printf puts scanfcin>>t;while(t--)solve();return 0;
}

最后的题太难了不会,感觉还可以就点点赞吧,如有问题欢迎读者指正,一起加油

牛客练习赛111 A—D相关推荐

  1. 牛客练习赛111 D青蛙兔子的约会

    题目链接 示例1 输入 3 3 4 10 1 2 2 4 5 1 1 3 5 11 1 1 输出 YES NO NO 说明 第一问,青蛙晚上向右跳1次,白天无法与兔子相遇.青蛙向右跳2次,也就是2a= ...

  2. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  3. 牛客练习赛29 题解

    牛客练习赛29 A. 可持久化动态图上树状数组维护01背包 题解 这题跟标题没有任何关系- 贪心的使得负数删除的时候下标尽可能大,然后正数的时候下标尽可能小. 观察到每个数下标最大的时候就是它的初始下 ...

  4. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  5. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  6. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  7. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  8. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

  9. 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)

    牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作,最后得到的答案会是最大的,那我们可以将它放进一个最小堆中来维护,但是里面的数是需要取模的,当它取模的时候,将会变小.那 ...

  10. 妄想集合(牛客练习赛90)

    妄想集合(牛客练习赛90) 题意: 开始有 n 个可重集合,开始时每一个集合中都有一个数,有 m 个操作. Quant l r x\text{Quant l r x}Quant l r x:往编号在 ...

最新文章

  1. 数据库 sqlite top写法
  2. Pandas库(2):数据的统计分析
  3. [C语言]关于指针和int型的一道题目
  4. C++:cin.getline
  5. 在只需要一个指定正确的参数的情况下如何防止传入其他干扰的参数
  6. 院士拿布袋领奖归来,朋友圈刷屏了
  7. 打印十字图-蓝桥杯历届试题
  8. linux中wget 、apt-get、yum rpm区别
  9. 统计学习方法读书笔记12-逻辑斯蒂回归与最大熵
  10. 信号检测与估计理论_又又又送书啦!视觉SLAM十四讲:从理论到实践(第2版)...
  11. Mac “EdrawMax”已损坏,无法打开。 您应该将它移到废纸篓
  12. ubuntu安装xp字体
  13. 掌握这些方法论后我工资涨了一倍!
  14. cad多段线画圆弧方向_cad弧形多线(cad多段线怎么画弧线)
  15. java获取京东token_京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)...
  16. python微信抢红包神器_Python自动抢红包教程详解
  17. Visual FoxPro 6.0常用命令
  18. spring的Webflux
  19. cpu win10 安装yolo_yolov5 win10 数据集制作 各种踩坑
  20. STM32 Tips:如何从ST官方网站上下载STM32标准外设库(STM32F10x standard peripheral library)

热门文章

  1. 循环队列——队列的顺序表示和实现
  2. 《DADA全球艺术启蒙系列·第一辑(莫奈,沃霍尔,毕加索,梵高,夏加尔)》带回家的美术馆...
  3. 深度学习tensorflow --- 男人变女人3
  4. 汇总Python全国面试官的50连提问,熟练后月薪一万office轻松到手
  5. Java开发 - 不知道算不算详细的MySQL多维度性能优化剖析
  6. pta程序设计6-1 计算两数的和与差 (10分)
  7. 中报业绩预告:这些公司股价超跌业绩却大增20170703
  8. windows下安装MySQL5.7.33-详细操作手册-怎么说来着?保姆级操作手册?
  9. linux下php文件目录结构,4、Linux的文件系统结构(目录树结构)
  10. The ‘photo‘ attribute has no file associated with it.