QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#471418 | #5416. Fabulous Fungus Frenzy | yz_ly | TL | 15ms | 34100kb | C++14 | 4.1kb | 2024-07-10 21:03:45 | 2024-07-10 21:03:45 |
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;
int f=0;
for(int j=1;j<=k;j++){
if(p[j][i].size()&&q[i].size()+q[0].size()>=p[j][i].size()){
f=1;
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
gg[x][y]=t[x][y];
}
}
for(int d=0;d<=num;d++){
now[d]=q[d];
}
int ff=0;
vector<node> hh=ans;
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);
else if(now[0].size())
calc((*now[0].begin()).first,(*now[0].begin()).second,x,y,now);
else{
ff=1;
break;
}
now[id[t[x][y]]].erase(make_pair(x,y));
t[x][y]=0;
}
if(ff)
break;
}
for(int x=1;x<=h[j];x++){
for(int y=1;y<=w[j];y++){
now[0].insert(make_pair(x,y));
}
}
if(ff){
ans=hh;
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
t[x][y]=gg[x][y];
}
}
continue;
}
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];
}
}
}
}
if(!f)
return false;
}
}
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;
}
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;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3836kb
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: 3832kb
input:
2 2 1 OO OO PP PP 1 2 OP
output:
-1
result:
ok puzzle solved
Test #3:
score: 0
Accepted
time: 0ms
memory: 3896kb
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:
222 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 -4 3 2 -4 4 2 -2 4 3 -2 4 4 -2 4 5 -2 4 6 -2 4 7 -2 4 8 -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 1 1 -4 4 2 -2 4 3 -2 4 4 -4 3 6 -4 4 6 -2 4 7 -4 3 5 -4 4 5 2 1 1 -4 4 8 -1 4 ...
result:
ok puzzle solved
Test #4:
score: 0
Accepted
time: 0ms
memory: 3740kb
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: 3764kb
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: 3780kb
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: 4080kb
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: 8ms
memory: 34100kb
input:
20 20 20 bofelagiqboebdqplbhq qsrksfthhptcmikjohkt qrnhpoatbekggnkdonet aoalekbmpbisgflbhmol djnhnlitcakltqgegqrt fdctfarsmbnbeosdgilo ttrsljgiratfmioajorh gorljkihdnmnofnblfhm bqjkaehetdjlgctmijpc geslcskpoqjcgtbdspoa riqthroqmmhqgprqhsba fdiarrcomockfqdjjdkd jsbnigfqgsfekbbnnkir ildqctqtqrpcetaocp...
output:
9823 10 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 -4 20 1 -2 20 2 -2 20 3 -2 20 4 -2 20 5 -2 20 6 -2 20 7 -2 20 8 -2 20 9 -2 20 10 -2 20 11 -2 20 12 -2 20 13 -2 20 14 -2 20 15 -2 20 16 -2 20 17 -2 20 18...
result:
ok puzzle solved
Test #9:
score: 0
Accepted
time: 2ms
memory: 3924kb
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: 15ms
memory: 4308kb
input:
20 20 2 pqo3Mcpvo74RFSsJszsa znrYm92Qr8fbqhbCTOgq 4KiMYr0kLAxPGNG15x7L QHKmq6xaJ4PU4msuRAiv UBfS6VUO87hRnMAjGXKX zCgknw3FfhdifmVcT6FF GH6ohIAzZuprlC3vMDVh mHIJ9KlQvWxt6EgGbJkA 3SwJNhRSdEeF9BNtc9k2 mZmEuriH7Rc4ccMjqI0Y cFfI8TC1iM4PkKziLOiN 15CUjuwudnrums3c3dsl ekL52LiFEpzmU4vaGtuX CfrnQtWb5zAN9oQS2fj...
output:
10436 -4 18 8 -2 18 9 -2 18 10 -2 18 11 -2 18 12 -2 18 13 -2 18 14 -2 18 15 -2 18 16 -2 18 17 -2 18 18 -2 18 19 -2 18 20 -2 16 7 -2 16 8 -2 16 9 -2 16 10 -2 16 11 -2 16 12 -2 16 13 -2 16 14 -2 16 15 -2 16 16 -2 16 17 -2 16 18 -2 16 19 -2 16 20 -4 14 10 -4 15 10 -4 16 10 -4 17 10 -2 17 11 -2 17 12 -2...
result:
ok puzzle solved
Test #11:
score: 0
Accepted
time: 0ms
memory: 4064kb
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...