【CF #784 Div4】A-H

A. Division?

题目

分析

根据题目要求,条件输出

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1e5+10;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
 
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int r;
		cin>>r;
		if(r>=1900)
		{
			cout<<"Division 1"<<endl;
		}
		else if(r>=1600&&r<=1899)
		{
			cout<<"Division 2"<<endl;
		}
		else if(r>=1400&&r<=1599)
		{
			cout<<"Division 3"<<endl;
		}
		else cout<<"Division 4"<<endl;
	} 
	return 0;
}

B. Triple

题目

分析

输出任一至少出现过3次的数,否则输出-1

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=2e5+10;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
int a[maxn];

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		int ans=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		sort(a+1,a+1+n);
		int f=0;
		for(int i=1;i<=n-2;i++)
		{
			if(a[i]==a[i+1]&&a[i]==a[i+2])
			{
				ans=a[i];
				f=1;
				break;
			}
		}
		if(!f) cout<<"-1"<<endl;
		else cout<<ans<<endl;
	} 
	return 0;
}

C. Odd/Even Increments

题目

分析

你可以任意次对奇数位或偶数位+1,判断最后的数组是否能够变成全奇或者全偶。

直接判断奇数位和偶数位的奇偶性。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1e3+10;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
int a[maxn];

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		memset(a,0,sizeof(a)); 
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		int f1,f2;
		int ff1=1,ff2=1;
		if(a[1]%2==1)  //奇数位 
		{
			f1=1;
		}
		else f1=0;
		for(int i=3;i<=n;i+=2)
		{
			if(f1==1) //奇数 
			{
				if(a[i]%2==0)
				{
					ff1=0;
					break;
				}
			}
			else {  //偶数 
				if(a[i]%2==1)
				{
					ff1=0;
					break;
				}
			}
		}
		if(a[2]%2==1)  //偶数位 
		{
			f2=1;
		}
		else f2=0;
		for(int i=4;i<=n;i+=2)
		{
			if(f2==1)  //奇数 
			{
				if(a[i]%2==0)
				{
					ff2=0;
					break;
				}
			}
			else {    //奇数 
				if(a[i]%2==1)
				{
					ff2=0;
					break;
				}
			}
		}
		int f=1;
		if(!ff1||!ff2)
		{
			f=0;
		}
		if(f) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	} 
	return 0;
}

D. Colorful Stamp

题目

分析

给一些格子,每次可以对格子进行盖章,将格子变为RB或者BR,盖章结果可以覆盖。判断给出的结果是否可以通过盖章获得。

找规律,发现被盖章的一段只要同时有B和R这个就是可以获得的。然后只需要注意一些细节、、、

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1e3+10;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		string s;
		cin>>s;
		int f=1;
		int f1=0,f2=0;
		if(n==1&&s[0]!='W')
		{
			cout<<"NO"<<endl;
			continue;
		}
		int f3=0;
		int cnt=0;
		if(s[0]=='W') f3=1;
		for(int i=0;i<s.size();i++)
		{
			if(s[i]=='B') f1=1,f3=0;
			if(s[i]=='R') f2=1,f3=0;
			if(s[i]=='W')
			{
				cnt++;
				if(f3==1) continue;
				if(f1==1&&f2==1)
				{
					f1=0;
					f2=0;
				}
				else {
					f=0;
				}
				f3=1;
				//cout<<f<<" "<<i<<endl;
			}
		}
		if(s[n-1]!='W') 
		{
			if(f1==0||f2==0)
			{
				f=0;
			}
		}
		if(cnt==n) f=1;	
		if(f) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	} 
	return 0;
}

E. 2-Letter Strings

题目

分析

n个由a到k组成的长度为2的字符串,求有且仅有一个字符相同的组数。

只有12个字母,最多12*12个组合,对每一个计数即可。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1e3+10;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
int a[maxn][maxn];

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		ll ans=0;	
		memset(a,0,sizeof(a));	
		char x,y;
		for(int j=0;j<n;j++)
		{
			cin>>x>>y;
			for(int i='a';i<='k';i++)
			{
				if(i!=y) ans+=a[x][i];
				if(i!=x) ans+=a[i][y];
			}
			a[x][y]++;
		}
		cout<<ans<<endl;
	}
	return 0;
}

F. Eating Candies

题目

分析

n堆糖果,Alice只能从左边开始吃,Bob只能从右边开始吃,一堆被吃过就不能被另一个人吃,每人吃的总数必须相同,输出,最多可以被吃掉多少堆。

用前缀和记录Alice吃的数目,用后缀和记录Bob吃的数目,枚举,二分

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=2e5+10;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
int w[maxn],pre[maxn],lat[maxn];

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		int ans1=0,ans2=0;
		int cnt1=0,cnt2=0;
		for(int i=1;i<=n;i++)
		{
			cin>>w[i];
			pre[i]=w[i];
			lat[i]=w[i];
		}
		for(int i=2;i<=n;i++)
		{
			pre[i]+=pre[i-1];
		}
		for(int i=n-1;i>=1;i--)
		{
			lat[i]+=lat[i+1];
		}
		int maxx=0;
		int flag=0;
		for(int i=n;i>=0;i--)
		{
			int l=i+1,r=n;
			int ex=pre[i];
			while(l<r)
			{
				int mid=(l+r)/2;
				if(lat[mid]>ex) l=mid+1;
				else r=mid;
			}
			if(lat[l]==ex&&i<l)
			{
				maxx=max(maxx,i+n-l+1);
			}
		}
		cout<<maxx<<endl;
	}
	return 0;
}

G. Fall Down

题目

分析

o是障碍物,*除非遇到障碍物都会掉落,输出最后掉落后的图。

数据很小,直接模拟暴力

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=100;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
char g[maxn][maxn];

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,m;
		cin>>n>>m;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				cin>>g[i][j];
			}
		}
		for(int j=0;j<m;j++)
		{
			int tt=n-1;
			for(int i=n-1;i>=0;i--)
			{
				if(g[i][j]=='o') tt=i-1;
				else if(g[i][j]=='*') 
				{
					swap(g[i][j],g[tt][j]);
					tt--;
				}
			}
		}
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				cout<<g[i][j];
			}
			cout<<endl;
		}
	}
	return 0;
}

H. Maximal AND

题目

分析

贪心。

在k次操作以内,我们要让n个数的位与和最大,位与后结果过只能为0或1,所以我们要尽可能让高位的都为1,这样大家位与以后这个二进制位上才为1,所以我们尽可能从高位去让所有数的二进制位都为1。所以我们要去找每一位二进制位上有多少个数在这个位上为0,然后利用贪心的思想让高位为1

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=100;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,k;
		cin>>n>>k;
		vector<int> cnt(31,0),a(n);
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
			for(int j=30;j>=0;j--)
			{
				if(a[i]&(1<<j)) ++cnt[j];
			}
		}
		int ans=0;
		for(int i=30;i>=0;--i)
		{
			int m=n-cnt[i];
			if(m<=k)
			{
				k-=m;
				ans+=(1<<i);
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值