求助
  • 板块学术版
  • 楼主2021chenyujing
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/1/24 21:27
  • 上次更新2023/10/28 11:15:50
查看原帖
求助
579697
2021chenyujing楼主2022/1/24 21:27

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;
}
2022/1/24 21:27
加载中...