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();
}
}