# Codeforces Round #648 (Div. 2) 简要题解

### A

int n,m;
bool vis1[110],vis2[110];

int main()
{
while (T--)
{
rep(i,1,n) vis1[i]=0;
rep(i,1,m) vis2[i]=0;
int c1=n,c2=m;
rep(i,1,n)
{
rep(j,1,m)
{
if (!x) continue;
if (!vis1[i]) {vis1[i]=1;c1--;}
if (!vis2[j]) {vis2[j]=1;c2--;}
}
}
int tmp=min(c1,c2);
if (tmp&1) puts("Ashish");else puts("Vivek");
}
return 0;
}


### B

int n,a[1010],b[1010],c[1010];

int main()
{
while (T--)
{
int c0,c1;c0=c1=0;
rep(i,1,n)
if (b[i]) c1=1;else c0=1;
if ((c0) && (c1)) puts("Yes");
else
{
rep(i,1,n) c[i]=a[i];
sort(c+1,c+1+n);
int ok=1;
rep(i,1,n)
if (a[i]!=c[i]) ok=0;
if (ok) puts("Yes");else puts("No");
}
}
return 0;
}


### C

int n,a[200200],b[200200],c[200200],p[200200];

int main()
{
rep(i,1,n)
{
int x=a[i],pos=p[x];
int cnt=(i+n-pos);
if (cnt>=n) cnt-=n;
c[cnt]++;
}
int ans=0;
rep(i,0,n-1) ans=max(ans,c[i]);
printf("%d",ans);
return 0;
}


### D

int n,m,sq[60][60],vis[60][60];
char s[60][60];
const int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
queue<pii> q;

bool valid(int x,int y)
{
return ((x>=1) && (x<=n) && (y>=1) && (y<=m));
}

void bfs(int stx,int sty)
{
if (!sq[stx][sty]) return;
q.push(mkp(stx,sty));vis[stx][sty]=1;
while (!q.empty())
{
pii now=q.front();q.pop();
int x=now.fir,y=now.sec;
rep(i,0,3)
{
int nx=x+dx[i],ny=y+dy[i];
if ((valid(nx,ny)) && (sq[nx][ny]) && (!vis[nx][ny]))
{
vis[nx][ny]=1;
q.push(mkp(nx,ny));
}
}
}
}

int main()
{
while (T--)
{
rep(i,1,n)
{
scanf("%s",s[i]+1);
rep(j,1,m) sq[i][j]=(s[i][j]!='#');
}
int ok=1;
rep(i,1,n)
{
rep(j,1,m)
{
if (s[i][j]=='B')
{
rep(k,0,3)
{
int nx=i+dx[k],ny=j+dy[k];
if (valid(nx,ny))
{
if (s[nx][ny]=='G') {ok=0;break;}
sq[nx][ny]=0;
}
}
if (!ok) break;
}
}
if (!ok) break;
}
if (!ok) {puts("No");continue;}
bfs(n,m);
rep(i,1,n) rep(j,1,m)
{
if ((s[i][j]=='G') && (!vis[i][j])) {ok=0;break;}
}
if (!ok) puts("No");else puts("Yes");
rep(i,1,n) rep(j,1,m) vis[i][j]=0;
}
return 0;
}


### E

int n;
ll a[510],ans=0;

int main()
{
ans=0;
rep(i,1,n) rep(j,i,n) rep(k,j,n)
ans=max(ans,a[i]|a[j]|a[k]);
printf("%lld",ans);
return 0;
}


### F

int n,a[510],b[510];
map<pii,int> mp;

int main()
{
while (T--)
{
rep(i,1,n/2) mp[mkp(a[i],a[n-i+1])]++;
int ok=1;
rep(i,1,n/2)
{
int x=b[i],y=b[n-i+1];
if (mp[mkp(x,y)])
{
mp[mkp(x,y)]--;
}
else if (mp[mkp(y,x)])
{
mp[mkp(y,x)]--;
}
else {ok=0;break;}
}
if ((n&1) && (a[(n+1)/2]!=b[(n+1)/2])) ok=0;
if (ok) puts("Yes");else puts("No");
}
return 0;
}


### G

int n,sta[1010];
ll ans[1010],cnt[10010],val[20];
vi q[20];

{
int len=id.size();
if (!len) return 0;
printf("? %d ",len);
rep(i,0,len-1) printf("%d ",id[i]);
puts("");fflush(stdout);
return val;
}

{
printf("! ");
rep(i,1,n) printf("%lld ",ans[i]);
puts("");fflush(stdout);
}

int main()
{
rep(i,1,lim) cnt[i]=cnt[i>>1]+(i&1);
int now=0;
rep(i,1,lim)
{
if (cnt[i]!=6) continue;
sta[++now]=i;
rep(j,0,12)
if ((i>>j)&1) q[j].pb(now);
if (now==n) break;
}