QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#471481 | #5416. Fabulous Fungus Frenzy | yz_ly | WA | 13ms | 34100kb | C++14 | 4.2kb | 2024-07-10 21:29:39 | 2024-07-10 21:29:40 |
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,id1[255];
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++){
id1[i]=i;
}
// for(int i=1;i<=num;i++){
// for(int j=1;j<num;j++){
// if(q[id1[j]].size()<q[id1[j+1]].size())
// swap(id1[j],id1[j+1]);
// }
// }
vector<int> vis;
for(int i=1;i<=k+1;i++){
vis.emplace_back(0);
}
for(int i=1;i<=num;i++){
if(q[id1[i]].size()>c[id1[i]].size()){
flag=1;
for(int j=1;j<=k;j++){
if(!vis[j]&&p[j][id1[i]].size()&&q[id1[i]].size()+q[0].size()>=p[j][id1[i]].size()){
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;
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
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;
}
}
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];
}
}
}
vis[j]=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;
}
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: 1ms
memory: 3804kb
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: 3808kb
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: 3812kb
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: 4036kb
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: 3784kb
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: 3836kb
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: 3752kb
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: 13ms
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: 1ms
memory: 3868kb
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: -100
Wrong Answer
time: 1ms
memory: 3828kb
input:
20 20 2 pqo3Mcpvo74RFSsJszsa znrYm92Qr8fbqhbCTOgq 4KiMYr0kLAxPGNG15x7L QHKmq6xaJ4PU4msuRAiv UBfS6VUO87hRnMAjGXKX zCgknw3FfhdifmVcT6FF GH6ohIAzZuprlC3vMDVh mHIJ9KlQvWxt6EgGbJkA 3SwJNhRSdEeF9BNtc9k2 mZmEuriH7Rc4ccMjqI0Y cFfI8TC1iM4PkKziLOiN 15CUjuwudnrums3c3dsl ekL52LiFEpzmU4vaGtuX CfrnQtWb5zAN9oQS2fj...
output:
-1
result:
wrong answer solvable puzzle unsolved