Codeforces Round 817 (Div. 4)

A - Spell Check

考察是否只有这几个字符出现。用map记录一下即可。

#include "bits/stdc++.h"
using namespace std;

#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0);
#define all(x) x.begin(),x.end()
#define pi pair<int,int> 
#define vi vector<int>

char a[5]={'T','i','r','m','u'};
void solve()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
	if(n!=5){
		cout<<"No"<<endl;
		return ;
	}
	map<char ,int> mp;
	
	for (int i=0;i<n;i++){
		mp[s[i]]++;
	}
	for (int i=0;i<5;i++){
		if(mp[a[i]]!=1){
			cout<<"NO"<<endl;
			return ;
		}
	}
	
	cout<<"Yes"<<endl;
	
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

B - Colourblindness

简单的遍历一下,将特殊的情况考虑到即可。

#include "bits/stdc++.h"
using namespace std;

#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0);
#define all(x) x.begin(),x.end()
#define pi pair<int,int> 
#define vi vector<int>

char a[2][110];
void solve()
{
	int n;
	cin>>n;
	
	for (int i=0;i<2;i++){
		for (int j =0;j<n;j++){
			cin>>a[i][j];
		}
	}
	
	for (int i=0;i<n;i++){
		if(a[0][i]==a[1][i]){
			continue;
		}
		else if (a[0][i]=='G' && a[1][i]=='B'){
			continue;
		}
		else if (a[0][i]=='B' && a[1][i]=='G'){
			continue;
		}
		else {
			cout<<"NO"<<endl;
			return ;
		}
	}
	cout<<"Yes"<<endl;
	
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

C - Word Game

任然可以开一个map 记录每个字符串出现的次数,用二维字符串来将记录总的字符串,每次取三个即可。

#include "bits/stdc++.h"
using namespace std;

#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0);
#define all(x) x.begin(),x.end()
#define pi pair<int,int> 
#define vi vector<int>


void solve()
{
	int n;
    cin>>n;
    vi a(3);
    string s[3];
	map<string,int> mp;
	for (int i=0;i<3;i++){
		for (int j=1;j<=n;j++){
			string s1;
			cin>>s1;
			mp[s1]++;
			s[i]+=s1;
		}
	}
	
	for (int i=0;i<3;i++){
		for (int j=0;j<s[i].size();j+=3){
			string s1="";
			s1+=s[i][j];
			s1+=s[i][j+1];
			s1+=s[i][j+2];
			if(mp[s1]==1){
				a[i]+=3;
				
			}
			else if (mp[s1]==2){
				a[i]+=1;
			}
			
		}
	}
	for (int i=0;i<3;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
	

	
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

D - Line

先将未改变之前的总数记录,然后枚举每一位并记录改变后对于总数的贡献,并对这个记录的数组进行排序,将最大贡献的排在前面。最后在按位进行相加即可。(当贡献小于0时,可以选择不加上这个贡献)。

#include "bits/stdc++.h"
using namespace std;

#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0);
#define all(x) x.begin(),x.end()
#define pi pair<int,int> 
#define vi vector<int>


void solve()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
	vi a(n);

	int ans=0;
	for (int i=0;i<n;i++){
		if(s[i]=='L'){
			ans+=i;
			a[i]+=(n-1-i)-i;
		}
		else {
			ans+=n-1-i;
			a[i]+=i-(n-1-i);
		}
	}
	
	sort(all(a),greater());
	
	for (int i=0;i<n;i++){
		ans+=max((int)0,a[i]);
		cout<<ans<<" ";
	}
	cout<<endl;
	

	
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

E - Counting Rectangles

这题可以采用二维前缀和的做法。将高作为行,宽作为列,用坐标记录这样一个矩形的面积。

最后只要求出右下角坐标位(hb-1,wb-1) 左上角坐标位(hs+1,ws+1)的前缀和数组的面积即可。

#include "bits/stdc++.h"
using namespace std;

#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0);
#define all(x) x.begin(),x.end()
#define pi pair<int,int> 
#define vi vector<int>

const int N= 100010;
int  a[1010][1010];
int s[1010][1010];
void solve()
{
	int n,q;
	cin>>n>>q;
	
	for (int i=0;i<=1000;i++){
		for (int j=0;j<=1000;j++){
			a[i][j]=s[i][j]=0;
		}
	}
	for (int i=1;i<=n;i++){
		int h,w;
		cin>>h>>w;
		a[h][w]+=h*w;
	}
	
	for (int i=1;i<=1000;i++){
		for (int j=1;j<=1000;j++){
			s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
		}
	}
	
	for (int i=1;i<=q;i++){
		int h1,h2,w1,w2;
		cin>>h1>>w1>>h2>>w2;
		
		cout<<s[h2-1][w2-1]-s[h2-1][w1]-s[h1][w2-1]+s[h1][w1]<<endl;
	}
	
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

G - Even-Odd XOR

题意位奇数位上的数异或和等于偶数位上的数的异或和。可理解为总异或和为0。

所以改为要求一个没有重复的数的异或和为0的序列。

可以先从第一位到第n-3 为放任意不相等的数,可以为1--n-3. 但前n-3 位的异或和不能等于n-2 位。所以如果前n-3 位的异或和等于n-2 位就放另一个没出现过的数 eg:n-1 .

此时还要注意一个问题,就是前n-2 位的异或和要等于第n位数,但第n位数不能出现过。所以我们可以将d第n-2 位数设为一个极大的数(2^30) 这样的话可以保证第三十位始终不被占用从而使得第n位不出现过。

#include "bits/stdc++.h"
using namespace std;

#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0);
#define all(x) x.begin(),x.end()
#define pi pair<int,int> 
#define vi vector<int>
#define si set<int> 
#define mi map<int,int>
#define mc map<char,int>

void solve()
{
	int n;
	cin>>n;
	
	vi a;
	int sum=0;
	for (int i=1;i<=n-3;i++){
		a.push_back(i);
		sum^=i;
	}
	
	if((sum^(n-2))==0){
		sum^=(n-1);
		a.push_back(n-1);
	}
	else {
		a.push_back(n-2);
		sum^=(n-2);
	}
	
	a.push_back(1<<30);
	sum^=(1<<30);
	
	a.push_back(sum);
	
	for (auto x : a){
		cout<<x<<" ";
	}
	cout<<endl;
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}
相关推荐
霍金的微笑13 分钟前
LeetCode
算法·leetcode·职场和发展
菜鸟求带飞_20 分钟前
算法打卡:第十一章 图论part10
java·数据结构·算法·图论
窜天遁地大吗喽25 分钟前
分层图 的尝试学习 1.0
学习·算法·图论
TSINGSEE27 分钟前
高空抛物AI检测算法:精准防控,技术革新守护城市安全
人工智能·算法·安防视频监控·安防监控系统·高空抛物
二进制人工智能29 分钟前
【C++设计模式】(四)创建型模式:简单工厂模式,工厂方法模式,抽象工厂模式
c++·设计模式
冰淇淋加点糖1 小时前
C语言基础之数组
c语言·数据结构·算法
taulee011 小时前
【题解】Codeforces Round 975 (Div. 2) A~E
数据结构·c++·算法·深度优先·图论
quaer1 小时前
矩阵奇异值
人工智能·算法·机器学习
快乐的流畅1 小时前
【数据结构】图的最小生成树
数据结构·c++·图论
兵哥工控1 小时前
MFC工控项目实例之十八手动测试界面输入信号实时检测
c++·mfc