字节跳动-文远知行杯 广东工业大学第十四届程序设计竞赛(7题)

A - hzy 和 zsl 的生存挑战

在这里插入图片描述
在这里插入图片描述
这道题很有意思啊,在不知道答案的情况下很多人在比赛的时候可能会很着急就难以考虑到方方面面,其实只需要一个人说自己听到的数字,另一个人说与自己听到数字相反的数字,就一定能活下来。

这题就没必要附上代码了。

G - 简单数学题

在这里插入图片描述
这道题数据量很大,显然是需要推公式的。
我们将公式拆分开后,就会得到这样一个式子:
在这里插入图片描述
那么如何计算他们呢?这里就需要一些数学公式了
在这里插入图片描述
有了这个式子,上面就会变成在这里插入图片描述
至于这个式子的运算,想必大家高中的时候就已经练得炉火纯青了吧
最后得到的公式是这样的:

(n - 1)*2^n + 1

#include<bits/stdc++.h>
using namespace std;
#define maxn 300005
#define ll long long
#define lll __int128

const int mod=1e9+7;
ll n;
ll poww(ll a,ll b){
   
    ll ans=1,base=a%mod;
    while(b!=0){
   
        if(b&1!=0)ans=(ans*base)%mod;
        base=(base*base)%mod;
        b>>=1;
    }
    return ans%mod;
}
int main()
{
   
	while(~scanf("%lld",&n)){
   
		ll sum=(((n-1)%mod)*poww(2,n))%mod+1;
		printf("%lld\n",sum%mod);
	}
	return 0;
}

B - 人类史上最大最好的希望事件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
斐波那契螺旋线
就是经过的正方形的边长是按斐波那契数列排列的。这里我们开两个数组,一个存正方形的边长,一个存从0开始到a+b/4经过正方形的面积。预处理好这点应该就没什么问题了。

#include<bits/stdc++.h>
using namespace std;
#define maxn 50005
#define ll long long
const ll mod=192600817;

int t,a1,b1,a2,b2;
ll f[maxn],sum[maxn];

void init(){
   
	f[0]=f[1]=1;
	sum[0]=0;sum[1]=2;
	for(int i=2;i<maxn;i++){
   
		f[i]=(f[i-1]+f[i-2])%mod;
		sum[i]=(sum[i-1]+f[i]*f[i]%mod)%mod;
	}
}
int main()
{
   
	init();
	while(~scanf("%d",&t)){
   
		while(t--){
   
			scanf("%d %d %d %d",&a1,&b1,&a2,&b2);
			int s1=4*a1+b1,s2=4*a2+b2;
			if(s1>s2)swap(s1,s2);
			if(s1!=0)printf("%lld\n",((sum[s2]-sum[s1]+mod)%mod+f[s1]*f[s1]%mod) % mod);
			else printf("%lld\n",(sum[s2]-sum[s1]+mod)%mod);
		}
	}
	return 0;
}

C - 超级无敌简单题

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值