Codeforces Round #839 (Div. 3) A-E

A - A+B?

Problem - A - Codeforces

        签到题,输入一个字符串,直接输出a[0]+a[2]即可,代码如下

#include <bits/stdc++.h>

using namespace std;

#define endl '\n'
#define ll long long
#define PII pair<int,int>
void solve(){
	string str;
	cin>>str;
	int ans=str[0]+str[2]-96;
	cout<<ans<<endl;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t=1;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

B - Matrix Rotation

Problem - B - Codeforces

         模拟题,最多交换4次即可得到重复,所以模拟4次即可。

#include <bits/stdc++.h>

using namespace std;

#define endl '\n'
#define ll long long
#define PII pair<int,int>
void solve(){
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	for(int i=1;i<=4;i++)
	{   
		int t=c;
		c=d;
		d=b;
		b=a;
		a=t;
		if(a>b||c>d||a>c||b>d){
			continue;
		}else {
			cout<<"YES"<<endl;
			return ;
		}		
	}
	cout<<"NO"<<endl;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t=1;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

C - Different Differences

Problem - C - Codeforces

        贪心算法,要求在n个数里面选取k个数,组成单调递增序列,同时要求两个相邻元素直接的差种类最多。那么这个时候K个数我们想要满足条件二,就只能考虑按照差值为1,2,3排列来选取, 那么也就是1,2,4……,当第i项的值到n的个数不满足n-i是那么,从第i项(包括第i项)开始我们依次递增1选取。

#include <bits/stdc++.h>

using namespace std;

#define endl '\n'
#define ll long long
#define PII pair<int,int>
void solve(){
	int n,k;
	cin>>n>>k;
	map<int,int>mp;
	vector<int> ans;
	int st=1; //当前取到那一个数
	int cnt=0;
	for(int i=0;st<=k;i++)
	{
		st+=i;
		ans.push_back(st);
		cnt++;
        //后面个数全部填充也不够了
		if(k-st<n-cnt){
			st-=i;
			ans[cnt-1]=ans[cnt-2]+1;
			st=ans[cnt-1];
			break;
		}
        //个数已经足够。
		if(cnt>=n){
			break;
		}
	}
	for(int i=st+1;cnt<n;i++)
	{
		ans.push_back(i);
		cnt++;
	}
	for(auto d:ans) cout<<d<<" ";
	cout<<endl;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t=1;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

  D - Absolute Sorting 

   Problem - D - Codeforces     

        绝对值排序,给定一个数组a,然后我们需要计算出一个数x,使得对于每一个数减去x的绝对值小于后一个数减去x的绝对值。这个时候我们就需要贪心一下考虑x的取值。

        对于两个数  a,b;那么我们会有一个t=(a+b)/2 ,那么这个时候,我们可以得到如果a<b 那么x的取值必须 x<=t,相反的是x>t,那么这个时候我们就可以用l,r限制x的取值范围。

#include <bits/stdc++.h>

using namespace std;

#define endl '\n'
#define ll long long
#define PII pair<int,int>
void solve(){
	int n;
	cin>>n;
	vector<ll> v(n);
	for(int i=0;i<n;i++) cin>>v[i];
	ll l=0,r=0x3f3f3f3f;
	for(int i=0;i<n-1;i++)
	{
		if(v[i]<v[i+1]){
			r=min(r,(v[i]+v[i+1])/2);
		} 
		if(v[i]>v[i+1]){
            //这里的+1很细节,举例2,1如果选取1的话,相减取绝对值变成1,0依旧不成立,需要选
            //取x=2;
			l=max(l,(v[i]+v[i+1]+1)/2);
		}
	}
	if(l<=r) cout<<l<<endl;
	else cout<<-1<<endl;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t=1;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

E - Permutation Game

Problem - E - Codeforces

        博弈论,两人轮流涂色,然后涂色后的位置可任意排序。也就是说谁先将自己需要涂的位置涂完,谁就可以获得胜利。出现平局的原因:剩下一个数两人都需要涂色。那么谁将这块颜色涂完对方就会获得胜利。所以我们可以得到t1,t2,t3,分别代表第一个人需要涂色的,第二个人需要涂色的,两人共同涂色的部分。那么当t1 <=t2-t3时第一个人胜利,当t2<t1-t3时第二个人胜利,其他情况是平局。

#include <bits/stdc++.h>

using namespace std;

#define endl '\n'
#define ll long long
#define PII pair<int,int>
void solve(){
	int n;
	cin>>n;
	vector<int> v(n+1);
	for(int i=1;i<=n;i++) cin>>v[i];
	int t1=0,t2=0,t3=0;
	for(int i=1;i<=n;i++)
	{
		if(v[i]!=i) t1++;
		if(v[i]!=n-i+1) t2++;
		if(v[i]!=i&&v[i]!=n-i+1) t3++;
	}
	if(t1-t3>t2) cout<<"Second"<<endl;
	else if(t2-t3>=t1) cout<<"First"<<endl;
	else cout<<"Tie"<<endl;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t=1;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值