QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#471488 | #5416. Fabulous Fungus Frenzy | yz_ly | TL | 291ms | 33948kb | C++14 | 3.8kb | 2024-07-10 21:33:53 | 2024-07-10 21:33:55 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int f=1,x=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-f;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return f*x;
}
inline void work(int k){
if(k<0){
putchar('-');
k=-k;
}
if(k>9)
work(k/10);
putchar(k%10+'0');
}
/*
倒着做,一个完全相同的矩阵可以变成通用符,因为k很小,感觉dfs一下就差不多了
*/
int n,m,k,h[25],w[25],id[155],num;
char s[25][25],t[25][25],g[25][25][25];
set<pair<int,int> > q[63],p[25][63],c[63];
struct node{
int f,x,y;
};
vector<node> ans;
void solve(int l,int r,int x,int y,set<pair<int,int> > *q){
q[id[t[l][r]]].erase(make_pair(l,r));
q[id[t[x][y]]].erase(make_pair(x,y));
swap(t[l][r],t[x][y]);
q[id[t[l][r]]].insert(make_pair(l,r));
q[id[t[x][y]]].insert(make_pair(x,y));
}
void calc(int l,int r,int x,int y,set<pair<int,int> > *q){
while(r<y){
solve(l,r,l,r+1,q);
ans.emplace_back(node{-1,l,r});
r++;
}
while(l<x){
solve(l,r,l+1,r,q);
ans.emplace_back(node{-3,l,r});
l++;
}
while(r>y){
solve(l,r,l,r-1,q);
ans.emplace_back(node{-2,l,r});
r--;
}
while(l>x){
solve(l,r,l-1,r,q);
ans.emplace_back(node{-4,l,r});
l--;
}
}
bool dfs(set<pair<int,int> > *q){
char gg[25][25];
int flag=0;
set<pair<int,int> > now[63];
for(int i=1;i<=num;i++){
if(q[i].size()>c[i].size())
flag=1;
}
if(!flag){
for(int i=0;i<=num;i++){
now[i]=q[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(now[id[s[i][j]]].size()){
calc((*now[id[s[i][j]]].begin()).first,(*now[id[s[i][j]]].begin()).second,i,j,now);
now[id[s[i][j]]].erase(make_pair(i,j));
}
else{
calc((*now[0].begin()).first,(*now[0].begin()).second,i,j,now);
now[0].erase(make_pair(i,j));
}
}
}
return true;
}
for(int j=1;j<=k;j++){
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
gg[x][y]=t[x][y];
}
}
int sum=0;
for(int d=0;d<=num;d++){
now[d]=q[d];
if(q[d].size()<p[j][d].size())
sum+=p[j][d].size()-q[d].size();
}
if(sum>q[0].size())
continue;
vector<node> hh=ans;
int ff=0;
for(int x=1;x<=h[j];x++){
for(int y=1;y<=w[j];y++){
if(now[id[g[j][x][y]]].size()){
calc((*now[id[g[j][x][y]]].begin()).first,(*now[id[g[j][x][y]]].begin()).second,x,y,now);
ff=1;
}
else
calc((*now[0].begin()).first,(*now[0].begin()).second,x,y,now);
now[id[t[x][y]]].erase(make_pair(x,y));
t[x][y]=0;
}
}
if(!ff)
continue;
for(int x=1;x<=h[j];x++){
for(int y=1;y<=w[j];y++){
now[0].insert(make_pair(x,y));
}
}
ans.emplace_back(node{j,1,1});
if(dfs(now))
return true;
ans=hh;
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
t[x][y]=gg[x][y];
}
}
}
return false;
}
int main(){
n=read();
m=read();
k=read();
for(int i='0';i<='9';i++){
id[i]=++num;
}
for(int i='a';i<='z';i++){
id[i]=++num;
}
for(int i='A';i<='Z';i++){
id[i]=++num;
}
for(int i=1;i<=n;i++){
scanf("%s",s[i]+1);
for(int j=1;j<=m;j++){
c[id[s[i][j]]].insert(make_pair(i,j));
}
}
for(int i=1;i<=n;i++){
scanf("%s",t[i]+1);
for(int j=1;j<=m;j++){
q[id[t[i][j]]].insert(make_pair(i,j));
}
}
for(int i=1;i<=k;i++){
h[i]=read();
w[i]=read();
for(int j=1;j<=h[i];j++){
scanf("%s",g[i][j]+1);
}
for(int j=1;j<=h[i];j++){
for(int d=1;d<=w[i];d++){
p[i][id[g[i][j][d]]].insert(make_pair(j,d));
}
}
}
if(dfs(q)){
reverse(ans.begin(),ans.end());
work(ans.size());
putchar('\n');
for(auto i:ans){
work(i.f);
putchar(' ');
work(i.x);
putchar(' ');
work(i.y);
putchar('\n');
}
}
else
work(-1);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 4028kb
input:
3 3 1 OOO GOG BGB OOO GGG BBB 3 1 B G B
output:
13 -2 3 2 -4 3 3 -1 3 2 -2 2 2 -4 2 3 -1 2 2 -2 1 3 -2 1 2 1 1 1 -2 3 2 -2 2 2 -4 2 1 -4 3 1
result:
ok puzzle solved
Test #2:
score: 0
Accepted
time: 0ms
memory: 4036kb
input:
2 2 1 OO OO PP PP 1 2 OP
output:
-1
result:
ok puzzle solved
Test #3:
score: 0
Accepted
time: 1ms
memory: 3836kb
input:
4 8 4 11122222 33344444 55556666 77777777 NIxSHUOx DExDUIxx DANxSHIx YUANSHEN 2 3 NIy DEx 3 8 zzzzzzzz DANNSH9I YUA9SHEN 1 1 x 2 5 SHO8y DUUI8
output:
255 4 1 1 -2 2 6 -3 1 6 -2 2 5 -2 2 6 -3 1 6 -2 2 4 -2 2 5 -2 2 6 -3 1 6 -2 2 3 -2 2 4 -2 2 5 -2 2 6 -3 1 6 -2 2 2 -2 2 3 -2 2 4 -2 2 5 -2 2 6 -3 1 6 -4 2 3 -4 3 3 -4 4 3 -2 4 4 -2 4 5 -2 4 6 -2 4 7 -2 4 8 -2 2 4 -3 1 4 -2 2 3 -2 2 4 -3 1 4 -2 2 2 -2 2 3 -2 2 4 -3 1 4 2 1 1 -4 4 2 -2 4 3 -2 4 4 -2 4...
result:
ok puzzle solved
Test #4:
score: 0
Accepted
time: 0ms
memory: 3808kb
input:
2 2 1 OO OO OP PP 1 2 PP
output:
8 -4 2 1 -2 2 2 1 1 1 -4 2 1 1 1 1 -4 2 2 -1 2 1 -2 1 2
result:
ok puzzle solved
Test #5:
score: 0
Accepted
time: 0ms
memory: 3752kb
input:
2 2 1 OO OO OP PO 2 1 P P
output:
4 -4 2 2 -2 1 2 1 1 1 -2 1 2
result:
ok puzzle solved
Test #6:
score: 0
Accepted
time: 0ms
memory: 3732kb
input:
2 2 1 OO OO OP PO 2 2 PP PP
output:
-1
result:
ok puzzle solved
Test #7:
score: 0
Accepted
time: 0ms
memory: 3812kb
input:
2 2 1 OO OO OP PP 1 2 OP
output:
7 1 1 1 -4 2 2 -1 2 1 1 1 1 -4 2 2 -1 2 1 1 1 1
result:
ok puzzle solved
Test #8:
score: 0
Accepted
time: 28ms
memory: 33948kb
input:
20 20 20 bofelagiqboebdqplbhq qsrksfthhptcmikjohkt qrnhpoatbekggnkdonet aoalekbmpbisgflbhmol djnhnlitcakltqgegqrt fdctfarsmbnbeosdgilo ttrsljgiratfmioajorh gorljkihdnmnofnblfhm bqjkaehetdjlgctmijpc geslcskpoqjcgtbdspoa riqthroqmmhqgprqhsba fdiarrcomockfqdjjdkd jsbnigfqgsfekbbnnkir ildqctqtqrpcetaocp...
output:
9816 20 1 1 -4 2 1 -4 3 1 -4 4 1 -4 5 1 -4 6 1 -4 7 1 -4 8 1 -4 9 1 -4 10 1 -4 11 1 -4 12 1 -4 13 1 -4 14 1 -4 15 1 -4 16 1 -4 17 1 -4 18 1 -4 19 1 -2 19 2 -2 19 3 -2 19 4 -2 19 5 -2 19 6 -2 19 7 -2 19 8 -2 19 9 -2 19 10 -2 19 11 -2 19 12 -2 19 13 -2 19 14 -2 19 15 -2 19 16 -2 19 17 -2 19 18 -2 19 1...
result:
ok puzzle solved
Test #9:
score: 0
Accepted
time: 1ms
memory: 3772kb
input:
20 20 2 HbevPluVL5ORtUFcV9gf Mrq6zdTPMPnwlN7Fpzx6 Nfp71dVuxTZp9Qet0Ca9 ugbaF34DquDdbUnk5x7V fDFszn4PmvMpJ5BDWueJ 2YvFxKJgst8XbftPfy9T F7Q4huk87Lrp1M7i08is Q41E5AqLkkP3Q5qONXC2 MuM7iIzev3ZpxItvriQK 6OBdEC0sso5vdNQlrCSR BJQtKjN6RmppsMGIYL81 yyKsWJSoKorGGblNle0r RkKEQACh8f0bS5nPTtJH fQgoc39vdsPAUmxlYYL...
output:
-1
result:
ok puzzle solved
Test #10:
score: 0
Accepted
time: 4ms
memory: 4568kb
input:
20 20 2 pqo3Mcpvo74RFSsJszsa znrYm92Qr8fbqhbCTOgq 4KiMYr0kLAxPGNG15x7L QHKmq6xaJ4PU4msuRAiv UBfS6VUO87hRnMAjGXKX zCgknw3FfhdifmVcT6FF GH6ohIAzZuprlC3vMDVh mHIJ9KlQvWxt6EgGbJkA 3SwJNhRSdEeF9BNtc9k2 mZmEuriH7Rc4ccMjqI0Y cFfI8TC1iM4PkKziLOiN 15CUjuwudnrums3c3dsl ekL52LiFEpzmU4vaGtuX CfrnQtWb5zAN9oQS2fj...
output:
11664 -2 17 9 -2 17 10 -2 17 11 -2 17 12 -2 17 13 -2 17 14 -2 17 15 -2 17 16 -2 17 17 -2 17 18 -2 17 19 -2 17 20 -4 17 20 -1 17 19 -1 17 18 -1 17 17 -1 17 16 -1 17 15 -1 17 14 -1 17 13 -1 17 12 -1 17 11 -1 17 10 -1 17 9 -1 17 8 -1 17 7 -1 17 6 -1 17 5 -1 17 4 -1 17 3 -1 17 2 -1 17 1 -4 16 20 -1 16 1...
result:
ok puzzle solved
Test #11:
score: 0
Accepted
time: 291ms
memory: 5892kb
input:
20 20 2 7CDCA3gd4c8OE3Zs0VE1 vszVp5b7Vw7NnPisnZYJ hgfA8K4aV11nlDcDasWj hg7y388G2MOuTOpEGDBh DDTjEdOJNQHu2pzbuigf 6kdVkqykU2dDjqjDKD2v vmaF9cP326rpwhVIl0K6 KchHgQg3BK7Hqt9uLAX4 8klt7U0BZ2C8Ky7DQ5Jo Ce71gbv3U9nG7pNiwO5T SII4sonVJ3F34MELKUlD mLfuG79wBvqb2BKKLoRf GnBA95Uadz3lO2Dvuob1 NLqlqTyNPTp5sihp2tC...
output:
-1
result:
ok puzzle solved
Test #12:
score: -100
Time Limit Exceeded
input:
20 20 2 PcYcPItqOwm4yYbBIt9e iBIDFlswIdU1gSXVvuf7 GB55VjrsjvtPiW1lI0xt 8wDgW4acuIsbjY7McQHg cpYGIgQ5cI3Ctu4iAJj5 K1KDs608gqVk9EQM6gMF mJVEd5nuZQnlqLZ5Q2Yc lo5wptbLMN2J0j3ZENzE BTQuhuUjyGD1ha8mimg5 i6ixmpshNJ7TyUNjHcKm bS7CeGdF4L50ZcHyVi7O 0iJYFD57UR6LLANOw7w6 qjwguPgl3YE4wk57cx6f X5rA3btz798F76GFTPx...