Codeforces Round #794 (Div. 2)

A. 遍历一次

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pb push_back
#define ll long long
const int INF=0x3f3f3f3f;
const int N=1e6+10,M=1e6+10;

void solve(){ll ans=0;
	int n;cin>>n;bool ok=1;int a[n+1],b[n+1];int sum=0;
	for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
	for(int i=1;i<=n;i++){
		if((sum-a[i])==a[i]*(n-1)){
			cout<<"YES\n";return ;
		}
	} 
	cout<<"NO\n";
}

signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	int t;cin>>t;
	//int t=1;
	while(t--){
		solve();
	}
} 

B. 只需要找到区间是2的逆序对就可

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pb push_back
#define ll long long
#define L(i,j,k) for(ll i=(j);i<=(k);++i)
#define R(i,j,k) for(ll i=(j);i>=(k);--i)
const int INF=0x3f3f3f3f;
const int N=1e6+10,M=1e6+10;

void solve(){ll ans=0;
	int n;cin>>n;bool ok=1;int a[n+1]={INF},b[n+1];int sum=0;
	for(int i=1;i<=n;i++)cin>>a[i];
	int cnt=0;
	for(int i=1;i<n;i++){
		if(a[i]>a[i+1])cnt++,i++; 
	}
	cout<<cnt<<'\n';
}

signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	int t;cin>>t;
	//int t=1;
	while(t--){
		solve();
	}
} 

C. 模拟出b 然后判断一下即可

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pb push_back
#define ll long long
#define L(i,j,k) for(ll i=(j);i<=(k);++i)
#define R(i,j,k) for(ll i=(j);i>=(k);--i)
const int INF=0x3f3f3f3f;
const int N=1e5+10,M=1e6+10;
int a[N],b[N];
void solve(){ll ans=0;
	int n;cin>>n;bool ok=0;int sum=0;
	for(int i=1;i<=n;i++)cin>>a[i];int cnt=0;
	sort(a+1,a+1+n);
	if(n&1){
		cout<<"NO\n";return ;
	}
	for(int i=1,j=1;i<=n/2;i++){
		b[j]=a[i];b[j+1]=a[i+n/2];
		j+=2;
	}
	b[0]=b[n],b[n+1]=b[1];
	for(int i=1;i<=n;i+=2){
		if(b[i]>=b[i+1]&&b[i]<=b[i-1]){
			ok=1;
		}
		if(b[i]<=b[i+1]&&b[i]>=b[i-1]){
			ok=1;
		}
	}
	//for(int i=1;i<=n;i++)cout<<b[i]<<" "; 
	if(!ok){
		cout<<"YES\n";
		for(int i=1;i<=n;i++)cout<<b[i]<<" "; 
		cout<<'\n';
	}
	else cout<<"NO"<<'\n';
}

signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	int t;cin>>t;
	//int t=1;
	while(t--){
		solve();
	}
}  

D. 贪心

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pb push_back
#define ll long long
#define L(i,j,k) for(ll i=(j);i<=(k);++i)
#define R(i,j,k) for(ll i=(j);i>=(k);--i)
const int INF=0x3f3f3f3f;
const int N=1e5+10,M=1e6+10;

void solve(){ll ans=0;
	int a,b,c,d;cin>>a>>b>>c>>d;int cnt1=0,cnt2=0;
	string s;cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='A')cnt1++;
		if(s[i]=='B')cnt2++;
	}
	if(cnt1!=a+c+d||cnt2!=b+c+d){
		cout<<"NO\n";return ;
	}
	vector<int> x,y;int sum=0;
	for(int i=0,j;i<s.size();i=j+1){
		j=i;
		while(j<s.size()-1&&s[j]!=s[j+1])j++;
		if((j-i+1)%2==1)sum+=(j-i+1)/2;
		else{
			int w=(j-i+1)/2;
			if(s[i]=='A')x.pb(w);
			else y.pb(w);
		}
	}
	sort(x.begin(),x.end());
	sort(y.begin(),y.end());
	for(auto i:x){
		if(c>=i)c-=i;
		else sum+=i-1;
	}
	for(auto i:y){
		if(d>=i)d-=i;
		else sum+=i-1;
	}
	if(sum<c+d)cout<<"NO\n";
	else cout<<"YES\n";
}

signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	int t;cin>>t;
	//int t=1;
	while(t--){
		solve();
	}
}  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值