【题目链接】:http://codeforces.com/problemset/problem/411/B
【题意】
处理器有n个核;然后有k个存储单元;
有m轮工作;每轮工作都会给每个核确定一个数字;
这个数字是这个核这轮工作会填的储存单元的编号x(1< x< k)
一轮工作可能有多个核去填同一个存储单元;
这种情况出现时,我们规定填这个存储单元的所有的核都被锁定;
同时这个存储单元也被锁定;
下次如果还有核去填这个存储单元的话,不论有没有多个核去填它,它都会被锁定;
(核被锁定之后忽略后面的操作);
要求你输出最后每个核被锁定与否;
【题解】
一轮一轮地模拟就好;
每次填一个存储单元之后;
就在那个存储单元里面(vector)push_back这个核;
每轮扫一遍所有存储单元;
对那些已经被锁定的存储单元以及核的个数超过1个的存储单元进行锁核的操作就好;
存储单元别忘了锁;
【Number Of WA】
0
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0),cin.tie(0)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 110;
int n,m,k,a[N][N];
int core[N],cell[N];
vector <int> tcell[N];
int main(){
//Open();
Close();
cin >> n >> m >> k;
rep1(i,1,n){
rep1(j,1,m){
cin >> a[i][j];
}
}
rep1(j,1,m){
rep1(i,1,k) tcell[i].clear();
rep1(i,1,n){
if (core[i]) continue;
tcell[a[i][j]].pb(i);
}
rep1(i,1,k){
if ( (int) tcell[i].size() > 1 || cell[i]){
rep1(l,0,(int) tcell[i].size()-1){
core[tcell[i][l]] = j;
}
if (!cell[i]) cell[i] = j;
}
}
}
rep1(i,1,n)
cout << core[i] << endl;
return 0;
}