https://codeforces.com/contest/1738/problem/A
//模拟,无他
//注意细节
#include<bits/stdc++.h>
using namespace std;
#define int long long
int v[200005],w[200005];
struct node
{
int c,p;
}t[200005];
signed main()
{
ios::sync_with_stdio(0);cin.tie();cout.tie();
int tt;
for(cin>>tt;tt--;)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>t[i].p;
for(int i=0;i<n;i++)
cin>>t[i].c;
int x=0,y=0;
for(int i=0;i<n;i++)
{
if(t[i].p)w[y++]=t[i].c;
else v[x++]=t[i].c;
}
int ans=0;
sort(v,v+x);
sort(w,w+y);
if(x==y)
{
int res=min(v[0],w[0]);
for(int i=0;i<x;i++)
ans+=(v[i]+w[i])*2;
ans-=res;
}
else if(x>y)
{
ans+=v[0];
int i;
for(i=0;i<y;i++)
{
ans+=(v[x-i-1]+w[i])*2;//细节
}
for(i=x-1-i;i>0;i--)
ans+=v[i];
}
else if(x<y)
{
ans+=w[0];
int i;
for(i=0;i<x;i++)
{
ans+=(w[y-1-i]+v[i])*2;
}
for(i=y-i-1;i>0;i--)
ans+=w[i];
}
cout<<ans<<'\n';
}
}
https://codeforces.com/contest/1738/submission/174142228
//考虑好情况,特判前缀和给出长度为1,那么,不管是什么,都有[0]给出的数[0];
//一般情况,求值(确定)+分值(不确定)(需均分)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int v[200005],w[200005],u[200005];
struct node
{
int c,p;
}t[200005];
signed main()
{
// ios::sync_with_stdio(0);cin.tie();cout.tie();
int tt;
for(cin>>tt;tt--;)
{
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
cin>>v[i];
if(m==1){puts("YES");continue;}
//if((m==1)&&v[0]<0){puts("NO");continue;}
for(int i=1;i<m;i++)
w[i]=v[i]-v[i-1],u[i]=w[i];
sort(w+1,w+m);
int p=0;
for(int i=1;i<m;i++)
{
if(u[i]!=w[i])
{
puts("NO");p=1;break;
}
}
if(p)continue;
int res=ceil((double)v[0]/(n-m+1));//均分
if(w[1]<res){puts("NO");continue;}
puts("YES");
//out:continue;
}
}