QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#76362#2617. Browsing the CollectionretaliatorEliteTL 2967ms75988kbC++144.4kb2023-02-09 13:36:262023-02-09 13:36:27

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-02-09 13:36:27]
  • 评测
  • 测评结果:TL
  • 用时:2967ms
  • 内存:75988kb
  • [2023-02-09 13:36:26]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
long long read(){
	long long ret=0,neg=1;
	char ch;
	ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
	if(ch=='-'){
		neg=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		ret=(ret<<1)+(ret<<3)+(ch^48);
		ch=getchar();
	}
	return ret*neg;
}
void write(long long x){
	if(x<0) putchar('-'),x=-x;
	if(x>=10) write(x/10);
	putchar('0'+x%10);
}
map<long long,int> mp;
long long invmp[20010];
int idx;
int Pre[20010][510],Suf[20010][510];
vector<int> mpos[20010];
int rs[7];


int n,m;
int str[510][7];

int dis[20010][510];
set<int> unvis[20010];
int ans[510][510];
queue<pair<int,int> > q;

void Upd(int cstr,int lb,int rb,int del){
	set<int>::iterator it;
	/*if(cstr==1&&lb==0&&rb==3){
		cout<<"!!!\n";
		for(it=unvis[cstr].begin();it!=unvis[cstr].end();it++)
			cout<<(*it)<<' ';
		cout<<endl;
	}*/
	while(1){
		it=unvis[cstr].lower_bound(lb+1);
		if(it==unvis[cstr].end()) break;
		if((*it)>rb) break;
		dis[cstr][(*it)]=del+1;
		q.push(make_pair(cstr,(*it)));
		unvis[cstr].erase(it);
	}
}

void bfs(int st){
	memset(dis,0x3f,sizeof(dis));
	for(int i=1;i<=idx;++i){
		//unvis[i].clear();
		for(int j=0;j<mpos[i].size();++j){
			unvis[i].insert(mpos[i][j]);
		}
	}
	while(q.empty()==false) q.pop();
	for(int s=0;s<(1<<m);++s){
		long long cur=0;
		for(int j=m;j>=1;--j){
			cur=cur*1000ll;
			cur+=str[st][j]*((s>>(j-1))&1);
		}
		cur=mp[cur];
		dis[cur][st]=0;
		unvis[cur].erase(st);
		q.push(make_pair(cur,st));
	}
	while(q.empty()==false){
		long long cstr,pos;
		cstr=(q.front()).first;
		pos=(q.front()).second;
		q.pop();
		int np;
		//cout<<st<<' '<<cstr<<' '<<pos<<' '<<dis[cstr][pos]<<endl;
		np=Pre[cstr][pos];
		if(dis[cstr][np]>10000000){
			dis[cstr][np]=dis[cstr][pos]+1;
			q.push(make_pair(cstr,np));
			unvis[cstr].erase(np);
		}
		np=Suf[cstr][pos];
		if(dis[cstr][np]>10000000){
			dis[cstr][np]=dis[cstr][pos]+1;
			q.push(make_pair(cstr,np));
			unvis[cstr].erase(np);
		}
		long long tmp=invmp[cstr];
		for(int j=1;j<=m;++j){
			rs[j]=tmp%1000;
			tmp=(tmp-rs[j])/1000;
		}
		tmp=1;
		for(int j=1;j<=m;++j,tmp*=1000ll){
			if(rs[j]!=0) continue;
			long long nst;
			nst=invmp[cstr]+1ll*tmp*str[pos][j];
			nst=mp[nst];
			if(dis[nst][pos]>10000000){
				dis[nst][pos]=dis[cstr][pos]+1;
				q.push(make_pair(nst,pos));
				unvis[nst].erase(pos);
			}
		}
		tmp=1;
		for(int j=1;j<=m;++j,tmp*=1000ll){
			if(rs[j]==0) continue;
			long long nst;
			nst=invmp[cstr]-1ll*tmp*str[pos][j];
			//if(st==4&&cstr==19&&pos==4){
			////	cout<<"AAA "<<nst<<' '<<endl;
			//}
			nst=mp[nst];
			int lim=Pre[cstr][pos];
			//Upd(nst,);
			if(lim>=pos){
				Upd(nst,0,pos,dis[cstr][pos]);
				Upd(nst,lim,n,dis[cstr][pos]);
			}
			else{
				Upd(nst,lim,pos,dis[cstr][pos]);
			}
		}
	}
	int ccc=mp[0];
	for(int i=1;i<=n;++i){
		ans[i][st]=dis[ccc][i];
	}
}

int main(){
	//freopen("string.in","r",stdin);
	//freopen("string.out","w",stdout);
	n=read();
	m=read();
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			str[i][j]=read();
		}
		for(int s=0;s<(1<<m);++s){
			long long cur=0;
			for(int j=m;j>=1;--j){
				cur=cur*1000ll;
				cur+=str[i][j]*((s>>(j-1))&1);
			}
			if(mp[cur]==0){
				++idx;
				mp[cur]=idx;
				invmp[idx]=cur;
			}
		}
	}
	for(int i=1;i<=idx;++i){
		long long tmp=invmp[i];
		for(int j=1;j<=m;++j){
			rs[j]=tmp%1000;
			tmp=(tmp-rs[j])/1000;
		}
		for(int j=1;j<=n;++j){
			bool flag=true;
			for(int k=1;k<=m;++k){
				if(rs[k]==0||rs[k]==str[j][k]);
				else{
					flag=false;
					break;
				}
			}
			if(flag) mpos[i].emplace_back(j);
		}
		int lim=mpos[i].size();
		for(int j=0;j<lim;++j){
			if(j==0) Pre[i][mpos[i][j]]=mpos[i][lim-1];
			else Pre[i][mpos[i][j]]=mpos[i][j-1];
			if(j==lim-1) Suf[i][mpos[i][j]]=mpos[i][0];
			else Suf[i][mpos[i][j]]=mpos[i][j+1];
		}
	}
	/*for(int i=1;i<=idx;++i){
		cout<<"id: "<<i<<' '<<invmp[i]<<endl;
		for(int j=0;j<mpos[i].size();++j)
			cout<<mpos[i][j]<<' ';
		cout<<endl;
		for(int j=0;j<mpos[i].size();++j)
			cout<<Pre[i][mpos[i][j]]<<' ';
		cout<<endl;

		for(int j=0;j<mpos[i].size();++j)
			cout<<Suf[i][mpos[i][j]]<<' ';
		cout<<endl;
	}*/
	for(int i=1;i<=n;++i){
		bfs(i);
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			write(ans[i][j]);
			putchar(' ');
		}
		putchar('\n');
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 56ms
memory: 44856kb

input:

9 3
5 3 7
5 3 4
5 3 7
5 3 2
5 3 4
5 3 7
2 3 7
5 3 7
2 3 7

output:

0 1 2 1 2 3 1 2 1 
1 0 1 1 2 2 1 3 2 
2 1 0 1 1 2 1 3 2 
3 2 1 0 1 1 1 3 2 
3 2 2 1 0 1 1 3 2 
3 1 2 1 1 0 1 2 2 
2 1 3 1 2 1 0 1 2 
2 1 3 1 2 2 1 0 1 
1 1 3 1 2 3 2 1 0 

result:

ok 81 numbers

Test #2:

score: 0
Accepted
time: 18ms
memory: 44752kb

input:

2 2
2 2
1 1

output:

0 1 
1 0 

result:

ok 4 number(s): "0 1 1 0"

Test #3:

score: 0
Accepted
time: 20ms
memory: 44824kb

input:

2 5
2 1 1 2 1
1 2 1 2 1

output:

0 1 
1 0 

result:

ok 4 number(s): "0 1 1 0"

Test #4:

score: 0
Accepted
time: 24ms
memory: 44620kb

input:

4 1
4
2
3
2

output:

0 1 1 1 
1 0 1 2 
1 1 0 1 
1 2 1 0 

result:

ok 16 numbers

Test #5:

score: 0
Accepted
time: 25ms
memory: 45188kb

input:

4 5
2 3 4 4 1
3 1 3 4 2
3 1 2 4 4
2 4 3 3 4

output:

0 1 1 1 
1 0 1 1 
1 1 0 1 
1 1 1 0 

result:

ok 16 numbers

Test #6:

score: 0
Accepted
time: 30ms
memory: 45224kb

input:

4 5
2 3 1 4 2
3 2 4 4 4
4 4 4 3 1
3 3 3 1 3

output:

0 1 1 1 
1 0 1 1 
1 1 0 1 
1 1 1 0 

result:

ok 16 numbers

Test #7:

score: 0
Accepted
time: 59ms
memory: 45624kb

input:

8 5
7 8 3 1 5
3 3 8 4 5
5 1 5 8 5
2 7 4 6 7
6 4 3 5 5
5 3 7 6 2
2 4 2 8 6
5 5 4 4 2

output:

0 1 1 1 1 1 1 1 
1 0 1 1 1 1 1 1 
1 1 0 1 1 1 1 1 
1 1 1 0 1 1 1 1 
1 1 1 1 0 1 1 1 
1 1 1 1 1 0 1 1 
1 1 1 1 1 1 0 1 
1 1 1 1 1 1 1 0 

result:

ok 64 numbers

Test #8:

score: 0
Accepted
time: 97ms
memory: 44812kb

input:

16 2
12 15
4 6
16 10
13 3
2 7
2 13
4 1
14 16
14 6
7 11
7 1
13 11
15 7
10 6
4 13
4 13

output:

0 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 
1 0 1 1 1 1 1 1 2 1 2 2 1 1 2 2 
1 1 0 1 1 1 1 1 1 1 2 2 1 1 2 2 
1 2 1 0 1 1 1 1 1 1 2 2 1 1 2 2 
1 2 1 1 0 1 1 1 1 1 2 1 1 1 2 2 
1 2 1 1 1 0 1 1 1 1 2 1 1 1 2 2 
1 2 1 1 1 1 0 1 1 1 2 1 1 1 1 2 
1 2 1 1 1 2 1 0 1 1 1 1 1 1 1 2 
1 2 1 1 1 2 2 1 0 1 1 1 1 1 1 2 
1 2...

result:

ok 256 numbers

Test #9:

score: 0
Accepted
time: 93ms
memory: 46552kb

input:

16 5
14 3 2 6 11
9 1 4 3 12
16 14 10 1 5
9 4 13 10 16
3 3 13 11 14
10 2 5 7 15
8 7 3 10 16
1 2 7 7 13
11 6 10 3 3
11 5 15 2 9
16 7 14 12 8
1 13 10 2 9
5 11 13 4 3
5 12 8 16 1
15 1 5 11 13
3 11 15 16 16

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 2 
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 2 
1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 2 
1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 
1 1...

result:

ok 256 numbers

Test #10:

score: 0
Accepted
time: 157ms
memory: 45256kb

input:

26 3
3 16 24
12 6 26
3 6 19
25 11 12
5 22 26
17 1 20
16 11 11
11 23 12
7 17 10
12 9 8
22 19 25
21 17 21
3 25 20
16 4 2
25 25 17
23 8 12
24 4 12
24 14 12
16 6 18
19 10 1
16 6 14
16 26 12
11 6 24
25 7 6
16 1 23
4 2 14

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 2 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 2 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 1 1 2 1 0 1 1 1 1 1 1 1 1 1 1 1 1...

result:

ok 676 numbers

Test #11:

score: 0
Accepted
time: 202ms
memory: 48676kb

input:

32 5
4 30 20 26 8
29 18 22 5 14
20 22 31 31 28
12 22 27 12 4
13 7 14 32 16
6 29 20 21 25
22 21 21 20 24
4 14 18 4 28
4 9 9 29 11
11 5 11 20 30
19 27 21 6 7
3 11 2 2 12
24 17 18 30 29
13 8 20 28 26
9 17 2 21 3
32 23 31 11 23
16 28 20 2 5
30 30 11 29 6
15 21 30 17 32
15 18 13 19 25
24 17 26 18 4
23 21...

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

result:

ok 1024 numbers

Test #12:

score: 0
Accepted
time: 195ms
memory: 44980kb

input:

34 2
26 17
32 10
13 8
14 11
17 30
9 32
31 28
20 23
5 25
34 2
32 22
6 7
8 32
17 11
7 5
33 10
6 19
24 5
28 20
27 8
3 25
20 26
3 6
26 25
30 8
23 19
23 27
12 13
13 17
18 34
8 11
8 24
25 22
24 21

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 2 1 1 1 
1 0 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 
2 1 0 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 
2 2 1 0 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 
2 2 2 1 0 1 1 1 1 1 1 1 ...

result:

ok 1156 numbers

Test #13:

score: 0
Accepted
time: 431ms
memory: 52488kb

input:

64 5
4 16 39 57 15
38 19 6 30 35
24 21 29 50 34
7 18 44 10 24
48 8 51 46 48
38 7 7 6 13
5 29 14 6 44
42 57 49 22 38
53 24 29 42 46
37 34 54 44 55
18 59 38 55 13
46 61 61 53 35
30 54 47 25 51
15 13 47 63 48
34 12 30 3 37
22 43 47 3 61
39 6 62 41 26
30 26 2 14 48
1 3 9 43 44
47 40 53 18 31
19 26 41 42...

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

result:

ok 4096 numbers

Test #14:

score: 0
Accepted
time: 595ms
memory: 47368kb

input:

100 3
75 52 18
93 63 78
21 36 95
39 3 64
79 91 97
39 30 41
3 86 24
97 70 70
98 95 12
93 29 51
4 84 49
48 36 5
34 89 86
6 83 21
8 89 14
64 87 57
86 72 69
72 86 56
5 32 54
9 66 12
99 86 14
11 60 56
96 4 71
59 32 46
32 74 98
89 16 37
61 44 76
55 32 1
41 41 63
39 59 73
84 7 87
56 64 81
44 94 41
72 73 12...

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 2 1 1 1 2 2 2 1 1 
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

result:

ok 10000 numbers

Test #15:

score: 0
Accepted
time: 1094ms
memory: 60416kb

input:

128 5
122 18 15 41 30
78 109 50 118 101
34 110 71 93 99
98 30 54 126 13
91 99 108 58 97
27 38 75 54 33
47 82 25 25 82
97 23 73 58 117
50 90 92 71 121
39 121 111 73 94
53 8 119 89 80
51 6 40 86 8
90 93 80 35 40
55 30 29 9 114
78 104 61 22 87
83 55 41 55 31
31 66 24 15 8
28 79 38 6 29
57 95 124 104 3
...

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

result:

ok 16384 numbers

Test #16:

score: 0
Accepted
time: 1883ms
memory: 58776kb

input:

244 4
190 106 2 214
40 220 21 86
217 147 210 137
244 130 202 68
201 166 70 154
101 148 71 180
137 46 182 62
217 209 81 163
6 101 58 110
234 67 139 212
127 34 147 193
192 235 235 135
17 185 124 132
159 153 13 222
173 224 12 138
236 15 118 33
147 84 224 137
17 114 149 69
53 45 207 24
179 41 202 155
67...

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

result:

ok 59536 numbers

Test #17:

score: 0
Accepted
time: 2967ms
memory: 75988kb

input:

256 5
197 131 211 151 128
133 74 92 247 210
81 173 69 34 33
213 153 59 17 54
95 193 174 114 210
10 154 196 59 95
107 101 91 211 149
74 68 84 179 120
191 54 173 3 33
26 218 211 90 69
229 236 137 153 183
250 75 60 18 42
157 249 173 55 142
216 29 111 254 106
76 192 2 108 124
105 33 12 55 64
182 84 91 9...

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

result:

ok 65536 numbers

Test #18:

score: 0
Accepted
time: 1905ms
memory: 52480kb

input:

297 3
294 106 225
285 214 198
37 160 58
130 53 190
195 103 224
202 234 19
241 105 214
227 289 93
253 79 146
292 48 163
168 116 55
47 8 244
215 240 285
74 200 70
156 114 276
59 157 134
85 84 272
289 91 283
263 108 244
291 22 172
208 102 239
182 13 114
84 9 220
55 83 297
164 199 11
124 2 87
65 43 269
...

output:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 ...

result:

ok 88209 numbers

Test #19:

score: -100
Time Limit Exceeded

input:

500 5
476 371 300 184 275
302 264 130 67 432
301 54 107 319 223
268 93 476 39 401
166 401 342 165 479
270 277 148 65 306
176 20 212 476 476
56 308 41 224 62
115 421 231 477 331
147 323 442 19 407
285 388 417 158 99
388 440 293 453 75
222 64 139 49 7
54 85 304 142 171
487 276 14 274 106
11 271 203 32...

output:


result: