题目分析:设上升次数w为x ,则x*u-(n-x)*d>=0 解得:x>=n*d/(u+d);当能够整除时:在最终停在u+d,不过能够时停在
(n*d/(u+d)+1)*(u+d)-n*d;
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF) { int ans=100000000; //printf("%lld\n",ans); int u,d,temp,temp1; for(int i=1;i<=m;i++) { scanf("%d %d",&u,&d); if((n*d)%(u+d)==0) { temp1=u+d;//为啥是这样雅!!!不懂呀,//temp=(n*d)/(u+d); if(temp1<ans) ans=temp1; } else { temp=(n*d/(u+d))+1; if(temp*u-(n-temp)*d<ans) ans=temp*u-(n-temp)*d; } } printf("%d\n",ans); } system("pause"); return 0; } /* #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF) { long long ans=1000000000000000000; //printf("%lld\n",ans); long long u,d,temp; for(int i=1;i<=m;i++) { scanf("%lld %lld",&u,&d); { if((n*d)%(u+d)==0) temp=(n*d)/(u+d); else temp=(long long)(n*d*1.0/(u+d))+1; if(temp*u-(n-temp)*d<ans) ans=temp*u-(n-temp)*d; } } printf("%lld\n",ans); } system("pause"); return 0; } */