Codeforces Round 806 (Div. 4)

A - YES or YES?

复制代码
#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()
{
	string s;
	cin>>s;
	
	if(s=="YES"){
		cout<<"Yes"<<endl;
	}
	else {
		cout<<"NO"<<endl;
	}
	
	
}

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

B - ICPC Balloons

复制代码
#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;
	
	string s;
	cin>>s;
	int ans=0;
	map<char,int> mp;
	
	for (int i=0;i<(int)s.size();i++){
		if(mp[s[i]]==0){
			ans+=2;
			mp[s[i]]=1;
		}
		else {
			ans++;
		}
	}
	
	cout<<ans<<endl;
}

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

C - Cypher

复制代码
#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(n);
	for (int i=0;i<n;i++){
		cin>>a[i];
	}
	
	for (int i=0;i<n;i++){
		int m;
		cin>>m;
		string s;
		cin>>s;
		for (int j=0;j<m;j++){
			if(s[j]=='U'){
				if(a[i]==0){
					a[i]=9;
				}
				else {
					a[i]--;
				}
			}
			else {
				if(a[i]==9){
					a[i]=0;
				}
				else {
					a[i]++;
				}
				
			}
		}
	}
	
	for (int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
	
	
	
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

D - Double Strings

这题数据较小遍历每个字符串暴力求解即可

复制代码
#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;
	
	string s[n];
	vi a(n);
	map<string ,int> mp;
	for (int i=0;i<n;i++){
		cin>>s[i];
		mp[s[i]]=1;
	}
	
	for (int i=0;i<n;i++){
		string s1=s[i];
		
			
			for (int j=0;j<(int)s1.size();j++){
				string s3=s1.substr(j);
				string s2=s1.substr(0,j);
			if(mp[s2] && mp[s3]){
				a[i]=1;
			
			}
		}
	}
		
	
	for (int i=0;i<n;i++){
		cout<<a[i];
	}
	cout<<endl;
}
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

E - Mirror Grid

实际上就是让四个部分关于中心点对称。所以只要遍历四分之一区块即可,通过推导推出另外三点于这点的关系。

复制代码
#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>

char s[110][110];

int n;
int sum=0;
void cal(int x,int y){
	int x1,x2,x3,y1,y2,y3;
	 x3=n+1-y,y3=x;
	 x1=n+1-x3,y1=n+1-y3;
	 x2=n+1-x,y2=n+1-y;
	
	int ans=0;
	if(s[x][y]=='1') ans++;
	if(s[x1][y1]=='1') ans++;
	if(s[x2][y2]=='1') ans++;
	if(s[x3][y3]=='1') ans++;
	
	sum+=min(ans,4-ans);
	
}

void solve()
{
	sum=0;

	cin>>n;
	
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			cin>>s[i][j];
		}
	}
	for(int i = 1 ; i <= (n + 1) / 2 -(n%2); i ++ )
		for(int j = 1 ; j <= (n + 1) / 2 ; j ++ )
			cal(i,j);
		
	
	cout<<sum<<endl;

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

F - Yet Another Problem About Pairs Satisfying an Inequality

遍历一便当这个数小于这个数的下标时,就二分一下求出这个数大于的队列中的下标的数量。

并将这个下标放入队列中即可。(队列中放的都是下标)

复制代码
#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>
 
bool cmp(pi a,pi b){
	return a.first<b.first;
}
void solve()
{
	int n;
	cin>>n;
	vi a(n+1);
	vector<int> v;
	for (int i=1;i<=n;i++){
		cin>>a[i];
	}
	
	int sum=0;
	for (int i=1;i<=n;i++){
		if(a[i]<i){
			sum+=lower_bound(v.begin(),v.end(),a[i])-v.begin();
			v.push_back(a[i]);
		}
	}
	
	cout<<sum<<endl;
	
	
	
	
}
 
signed main()
{
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}

G - Good Key, Bad Key

这题可以考虑贪心的思想。因为dp的话具有后效性。因为要上限最高,所以尽量让坏钥匙放在后面,因为不会降低上限。所以我们遍历一遍分界点,从第一个到最后一个。其中坏钥匙最多只要计算32个左右,因为数值最大为1e9

复制代码
#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>

int m[40];
void solve()
{
	int n,k;
	cin>>n>>k;
	int maxn=0;
	int sum=0;
	vi a(n+1);
	vi s(n+1);
	for (int i=1;i<=n;i++){
		cin>>a[i];
		s[i]=s[i-1]+a[i];
	}
	
	
	for (int i=0;i<=n;i++){
		sum=s[i]-(int)i*k;
		for (int j=i+1;j<=min(i+32,n);j++){
			sum+=a[j]/m[j-i];
		}
		maxn=max(maxn,sum);
	}
	cout<<maxn<<endl;
}

signed main()
{
	m[0]=1;
	for (int i=1;i<=35;i++){
		m[i]=m[i-1]*2;
	}
	IOS
	int t;
	cin>>t;
	while(t--){
		solve();
	}
}
相关推荐
FakeOccupational39 分钟前
【数学 密码学】量子通信:光的偏振&极化的量子不确定性特性 + 量子密钥分发 BB84算法步骤
算法·密码学
ZhengEnCi3 小时前
S10-蓝桥杯 17822 乐乐的积木塔
算法
贾斯汀玛尔斯3 小时前
每天学一个算法--拓扑排序(Topological Sort)
算法·深度优先
t***5443 小时前
如何配置Orwell Dev-C++使用Clang
开发语言·c++
大龄程序员狗哥3 小时前
第25篇:Q-Learning算法解析——强化学习中的经典“价值”学习(原理解析)
人工智能·学习·算法
exp_add33 小时前
质数相关知识
算法
CoderCodingNo3 小时前
【信奥业余科普】C++ 的奇妙之旅 | 13:为什么 0.1+0.2≠0.3?——解密“爆int”溢出与浮点数精度的底层原理
开发语言·c++
小辉同志3 小时前
215. 数组中的第K个最大元素
数据结构·算法·leetcode··快速选择
小O的算法实验室4 小时前
2025年IEEE TITS,基于矩阵的进化计算+面向无线传感器网络数据收集无人机路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
OidEncoder4 小时前
编码器分辨率与机械精度的关系
人工智能·算法·机器人·自动化