2021牛客暑期多校训练营1

2021牛客暑期多校训练营1

A- Alice and Bob

博弈题,当面临结果为(0,0)时为失败,用二维数组 a[i][j]表示其中i为第一堆石头的数量,j为第二堆石头的数量,再枚举s和k找出必胜的状态。用bool数组节省时间ios::sync_with_stdio(0); cin.tie(0);加快cin,或者直接用scanf。

#include<bits/stdc++.h>
using namespace std;
bool a[5001][5001];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	for(int i=0;i<=5000;i++){
		for(int j=0;j<=5000;j++){
			if(a[i][j]==0){
				for(int k=1;k+i<=5000;k++){
					for(int s=0;s*k+j<=5000;s++){
						a[i+k][j+s*k]=1;
					}
				}
				for(int k=1;k+j<=5000;k++){
					for(int s=0;s*k+i<=5000;s++){
						a[i+s*k][j+k]=1;
					}
				} 
			}
		}
	}
	int t,n,m;
	cin>>t;
	while(t--){
		cin>>n>>m;
		if(a[n][m]==0)cout<<"Bob"<<endl;
		else cout<<"Alice"<<endl;
	}
	return 0;
}

B-Ball Dropping

找几何规律

用到相似三角形和勾股定理,当圆的直径大于b时圆掉落

#include<bits/stdc++.h>
using namespace std;
const int N =2e3+5;
int main(){
	double r,a,b,h;
	cin>>r>>a>>b>>h;
	if(2*r<b)cout<<"Drop"<< endl;
	else {
		cout<<"Stuck"<<endl;
		double c=b*h/(a - b);
		double d=2*c*r/b;
		double cnt=sqrt(pow(d,2)+pow(r,2))-c;
		printf("%.10lf",cnt);
	}
	return 0;
}

D-Determine the Photo Position

看每一行有几个连续的空位,大于等于老师的人数时就可以放下,每多一个空位那么情况就多一种

注意输入要用%1d

#include<bits/stdc++.h>
using namespace std;
int a[2005][2005];char b[2005];
int main(){
	int n,m;cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			scanf("%1d",&a[i][j]);
	cin>>b;
	int cnt=0,flag=0;
	for(int i=0;i<n;i++){
		cnt=0;
		for(int j=0;j<n;j++){
			if(a[i][j]==0)cnt++; 
			else if(a[i][j]==1)cnt=0;
			if(cnt>=m)flag++;
		}
	}cout<<flag<<endl;
	return 0;
} 

F-Find 3-friendly Integers

100以后的每个数字都与三有关,所以只需要判断100前面的数字就好啦

#include<bits/stdc++.h>
using namespace std;
long long ste(long long x){
	if(x>=100)return x-24;
	long long sum=0;
	for(int i=1;i<=x;i++){
		if(i%3==0)sum++;
		else if((i%10)%3==0||(i/10!=0&&(i/10)%3==0))sum++;
	}return sum;
}
int main(){
	int t;cin>>t;
	while(t--){
		long long l,r;cin>>l>>r;
		cout<<ste(r)-ste(l-1)<<endl;
	}return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值