每日一题- CF1991G

考场真是困傻了,这都不会

横的放左边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;
}  
posted @ 2024-07-29 21:09  Kent530  阅读(13)  评论(0)    收藏  举报