社区讨论
不是,猎奇算法也能过?
P9509 『STA - R3』Aulvwc参与者 7已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @lo1x0isq
- 此快照首次捕获于
- 2023/10/23 04:22 2 年前
- 此快照最后确认于
- 2023/11/03 04:49 2 年前
就 时暴力,其余情况判断全局平均数是不是整数就可以了。
有大佬可以帮我证一下 大于 时为什么这个判断可以吗。
CPP#include <bits/stdc++.h>
using namespace std;
const int m=5005;
int n;
int a[10005];
int avg[150005],vis[10005],k[10005],cnt[10005],vis_k[50005];
inline int read(){
int f=1,x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while('0'<=s&&s<='9'){x=(x<<1)+(x<<3)+s-48;s=getchar();}
return x*f;
}
inline bool check() {
int sum = 0;
for (int i = 1; i <= n; i++) sum += a[i];
if (sum % n != 0) return false;
return true;
}
bool fl;
void dfs(int step){
if(step==n+1){
for(int i=1;i<=n;i++) k[i]=0,cnt[i]=0;
for(int i=0;i<=5005+m;i++) vis_k[i]=0;
for(int i=1;i<=n;i++){
k[vis[i]]+=a[i];
cnt[vis[i]]++;
}int op=0;
for(int i=1;i<=n;i++){
if(cnt[i]) op++;
}
if(op<=1) return;
for(int i=1;i<=n;i++){
if(cnt[i]==0) continue;
if(k[i]%cnt[i]!=0) return;
vis_k[k[i]/cnt[i]+m]=1;
}int k=0;
// cout << 1 << "\n";
for(int i=0;i<=5005+m;i++){
k+=vis_k[i];
}
if(k<2){
fl=1;
printf("Yes\n");
}
return;
}
for(int i=1;i<=3;i++){
vis[step]=i;
dfs(step+1);
if(fl) return;
}
}int q;
int main() {
q=read();
for (int i = 0; i < q; i++) {
n=read();
for (int j = 1; j <= n; j++) {
a[j]=read();
}
if(n<=10){
fl=0;
for(int i=1;i<=n;i++) vis[i]=0;
dfs(1);
if(!fl) printf("No\n");
}else{
if (check()) {
printf("Yes\n");
} else {
printf("No\n");
}
}
}
return 0;
}
辛苦大佬了。
回复
共 11 条回复,欢迎继续交流。
正在加载回复...