Educational Codeforces Round 124 补题题解 (前四题)


比赛效果不错,在大佬的讲解下过了两道题,继续加油

比赛传送门
官方题解


A Playoff

简单思维

#include<bits/stdc++.h>

using namespace std;

#define int long long 

int dp[35];

void init()
{
   
	dp[1] = 2;
	for(int i = 2; i <= 31; i ++ ){
   
		dp[i] = dp[i - 1] * 2;
	}
}

signed main()
{
   
	init();
	int T;
	cin>>T;
	while(T -- ){
   
		int n;
		cin>>n;
		if(n >= 2){
   
			cout<<dp[n] - 1<<endl;
		}
		else if(n == 1) cout<<"1"<<endl;
	}
	return 0;
}

B Prove Him Wrong

也算是个思维题,刚开始没有理解题意,被1e9吓懵了,幸好在大佬指点之下拨云开雾
根据题意推出只要每个a[i]是前面的3倍(设第i个数是1,第j个数是m, 2(m-1)=m+1,得出m=3,推下一个可以用3替代1,依次向后推出后一个数是前一个数的三倍就可以让序列之和永远递增),那么这个数列的和无论怎么变化一定是增大的,然后判断3的几次方大于1e9,19次方,所以当n>=20(因为第一项是1)时就无法满足每个数都是前面的三倍,可能就不是反例了

#include<bits/stdc++.h>

using namespace std;

#define int long long 

int dp[23];

void init(){
   
	dp[1] = 1;
	for(int i = 2; i <= 22; i ++ ){
   
		dp[i] = dp[i - 1] * 3;
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值