dalaomen,求求啦,,已经n次没过了! 题目 古代某个国王想奖励某大臣,国王问他的大臣:你想要什么。大臣答到:在64格棋盘上,在第1格放1粒小麦,在第2格放2粒,第3格放4粒,第4格放8粒,依此类推,一直放到第64格。国王听了非常高兴,因为他认为总共才64格,能放多少麦子呢?可等到士兵报告时,国王惊呆了,全年全国所有的麦子送给大臣都不够呢! 请问: (1)求前g格共有的小麦数 (2)如果,国王限制该大臣所得的奖励不能超过m,请问士兵最多只能将前面几个格子按规定放满就可以了? (1 <= g <= 60, m <= 2^60 - 1)
输入两个整数g和m,用空格间隔。
输出两个整数,用空格间隔,分别为第一问和第二问的答案。 样例输入
2 0
样例输出
3 0
#include<bits/stdc++.h>
using namespace std;
int m,i;
int main(){
long long g,m,ansy=0,anse=0,i,c=1,y,j;
cin>>g>>m;
for(i=0;i<=64;i++){
ansy+=c;
j=ansy-m;
while(j<=0){
anse++;
}
if(i==g-1)y=ansy;
if(i>g&&j>0)break;
c*=2;
}
cout<<y<<" "<<anse<<endl;
return 0;
}