考场真是困傻了,这都不会
横的放左边k列,竖的放上边k行,优先放能消的位置
#include<bits/stdc++.h>
using namespace std;
int t,n,m,k,q,a[105][105];
char s[1005];
int x[105],y[105];
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d",&n,&m,&k,&q);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=0;
scanf("%s",s+1);
for(int i=1;i<=q;i++){
if(s[i]=='H'){
int id=0;
for(int j=1;j<=n;j++){
int s1=0,s2=0;
for(int r=1;r<=m;r++){
if(r<=k)s1+=a[j][r];
s2+=a[j][r];
}
if(s1==0){
id=j;
if(s2==m-k)break;
}
}
printf("%d %d\n",id,1);
for(int j=1;j<=k;j++)a[id][j]=1;
}else{
int id=0;
for(int j=1;j<=m;j++){
int s1=0,s2=0;
for(int r=1;r<=n;r++){
if(r<=k)s1+=a[r][j];
s2+=a[r][j];
}
if(s1==0){
id=j;
if(s2==n-k)break;
}
}
printf("%d %d\n",1,id);
for(int j=1;j<=k;j++)a[j][id]=1;
}
for(int j=1;j<=max(n,m);j++)x[j]=y[j]=0;
for(int j=1;j<=n;j++)
for(int r=1;r<=m;r++)
x[j]+=a[j][r],y[r]+=a[j][r];
for(int j=1;j<=n;j++)
for(int r=1;r<=m;r++)
if(x[j]==m || y[r]==n)
a[j][r]=0;
}
}
return 0;
}
标签:CF1991G,int,每日,d%,一题,scanf,105
From: https://www.cnblogs.com/kentsbk/p/18331087