HDU 5386 Cover(模擬)
阿新 • • 發佈:2017-06-17
pad ger href for mem tracking pla cep tip
Total Submission(s): 966 Accepted Submission(s): 320
Special Judge
Problem Description You have ann?n matrix.Every
grid has a color.Now there are two types of operating:
L x y: for(int i=1;i<=n;i++)color[i][x]=y;
H x y:for(int i=1;i<=n;i++)color[x][i]=y;
Now give you the initial matrix and the goal matrix.There are m operatings.Put
in order to arrange operatings,so that the initial matrix will be the goal matrix after doing these operatings
It‘s guaranteed that there exists solution.
Input There are multiple test cases,first line has an integerT
For each case:
First line has two integern , m
Thenn lines,every
line has n integers,describe
the initial matrix
Thenn lines,every
line has n integers,describe
the goal matrix
Thenm lines,every
line describe an operating
1≤color[i][j]≤n
T=5
1≤n≤100
1≤m≤500
Output For each case,print a line includem integers.The
i-th integer x show that the rank of x-th operating is i
Sample Input
Sample Output
Author SXYZ
Source 2015 Multi-University Training Contest 8
Cover
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 966 Accepted Submission(s): 320
Special Judge
Problem Description You have an
L x y: for(int i=1;i<=n;i++)color[i][x]=y;
H x y:for(int i=1;i<=n;i++)color[x][i]=y;
Now give you the initial matrix and the goal matrix.There are
It‘s guaranteed that there exists solution.
Input There are multiple test cases,first line has an integer
For each case:
First line has two integer
Then
Then
Then
Output For each case,print a line include
Sample Input
1 3 5 2 2 1 2 3 3 2 1 3 3 3 3 3 3 3 3 3 3 H 2 3 L 2 2 H 3 3 H 1 3 L 2 3
Sample Output
5 2 4 3 1
Author SXYZ
Source 2015 Multi-University Training Contest 8
題意:給出兩個n*n的矩陣。一個作為初始矩陣,一個作為目標矩陣。給出m個操作,操作有兩種,
一種是“L。x。y”,代表我們要把x這一行賦成y,還有一種是“H,x,y”,代表要把x這一列賦成y,
問我們怎樣安排這些操作才幹把初始矩陣轉化成目標矩陣。
輸出方案,special judge
題解:最後一個操作肯定是把某一行或者某一列變成x,我們倒過來模擬,每次把最後一個操作找出來。即每次找到某一行
或者某一列不為0的數都同樣的,再找符合操作的。
#include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #include<iostream> #define N 110 using namespace std; int a[N][N]; struct Cao { char s[2]; int x,v; bool used; } b[N*5]; int ans[N*5]; int n,m; bool is_H(int i,int k) { int x=-1; int j=1; for(; j<=n; j++) { if(a[i][j]) { x=a[i][j]; break; } } if(x==-1)return true; if(x!=k)return false; for(; j<=n; j++) { if(a[i][j]&&a[i][j]!=x)return false; } return true; } bool is_L(int i,int k) { int x=-1; int j=1; for(; j<=n; j++) { if(a[j][i]) { x=a[j][i]; break; } } if(x==-1)return true; if(x!=k)return false; for(; j<=n; j++) { if(a[j][i]&&a[j][i]!=x)return false; } return true; } int main() { // freopen("test.in","r",stdin); int t; cin>>t; while(t--) { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) scanf("%d",&a[i][j]); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) scanf("%d",&a[i][j]); for(int i=1; i<=m; i++) { scanf("%s%d%d",b[i].s,&b[i].x,&b[i].v); b[i].used=0; } for(int h=m; h>=1; h--) { for(int i=1; i<=m; i++) { if(b[i].used)continue; if(b[i].s[0]=='H'&&is_H(b[i].x,b[i].v)) { ans[h]=i; b[i].used=1; int p=b[i].x; for(int k=1; k<=n; k++) a[p][k]=0; break; } else if(b[i].s[0]=='L'&&is_L(b[i].x,b[i].v)) { ans[h]=i; b[i].used=1; int p=b[i].x; for(int k=1; k<=n; k++) a[k][p]=0; break; } } } for(int i=1; i<m; i++) printf("%d ",ans[i]); printf("%d\n",ans[m]); } return 0; }
HDU 5386 Cover(模擬)