QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#76362 | #2617. Browsing the Collection | retaliatorElite | TL | 2967ms | 75988kb | C++14 | 4.4kb | 2023-02-09 13:36:26 | 2023-02-09 13:36:27 |
Judging History
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;
}
详细
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...