codeforces div2#701
A
题意
给你两个数a,b;可以进行如下两个操作:
1)a=a/b;
2)b=b+1;
要求用最小的操作次数使a=0;
思路
除非b=1,否则a最多30多步就可以到0,那么b操作最多进行30多次。2的10次方=1024。而且肯定越早加越好,那么枚举b的次数算出总次数取最小值即可
#include<iostream>
#include<cstdio>
using namespace std;
int T,A,B;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&A,&B);
int ans=1e9;
for(int t=0;t<100;t++)
{
int b=B+t;
int now=t;
if(b==1)continue;
int a=A;
while(a)a/=b,now++;
if(ans>now)ans=now;
}
printf("%d\n",ans);
}
return 0;
}
B
题意
思路
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n,q,k,a[100010];
cin>>n>>q>>k;
for (int i=0;i<n;i++)
{
cin>>a[i];
}
while(q--)
{
int l,r;
cin>>l>>r;
cout<<k+a[r-1]-a[l-1]-2*(r-l)-1<<endl;
}//k-a[r]+a[l]-1+2*(a[r]-a[l]+1-(r-l+1));
return 0;
}
以后写题不会再听歌了,看了好久才理解了题意,我恨