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();
	}
}
相关推荐
越城5 分钟前
C++类与对象(上)
开发语言·c++
✿ ༺ ོIT技术༻13 分钟前
剑指offer第2版:链表系列
数据结构·算法·链表
泽020231 分钟前
C++之哈希表的基本介绍以及其自我实现(开放定址法版本)
c++
序属秋秋秋33 分钟前
《C++初阶之STL》【泛型编程 + STL简介】
开发语言·c++·笔记·学习
yiridancan37 分钟前
终极剖析HashMap:数据结构、哈希冲突与解决方案全解
java·数据结构·算法·哈希算法
满分观察网友z39 分钟前
性能优化大作战:从 O(N*M) 到 O(N),我的哈希表奇遇记(1865. 找出和为指定值的下标对)
算法
点云SLAM3 小时前
二叉树算法详解和C++代码示例
数据结构·c++·算法·红黑树·二叉树算法
m0_535064609 小时前
C++模版编程:类模版与继承
java·jvm·c++
今天背单词了吗98010 小时前
算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题
笔记·学习·算法·牛顿迭代法
jdlxx_dongfangxing10 小时前
进制转换算法详解及应用
算法