最近在大力练习提答颓提答,听说果冻运输很好玩就来试试。

然后玩的停不下来 QAQ ...

于是开一篇博客写一下每个点的解法。(一个个手玩出来的。。)

首先我们每次都算什么下一步完后会发生什么在大脑中演算什么的太不友好了 QAQ ..

所以我们需要一个可视化的界面来手玩。。

只要改一改 Checker 我们就得到了一个可视化实时反馈的程序 >_<...

Checker 最后会附上的 QAQ..

Test 1:

0 . . . . . 1 . 0
| |
0 . . . . 0-0 . 0
| |
0 . . 3 . . 1 2 0
| |
0-0 2 0 3 . 0-0-0
| | | | | |
0-0-0-0-0-0-0-0-0

Test 2:

0 . . 2 . . . 2 0 : 4
| |
0 1 . 1 . . . 1 0 : 3
| |
0-0 . 0 . 0 . 0-0 : 2
| | | | | |
0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9

我们发现最后一共要合成两堆.

但是地上有三个坑?

那么我们搭一个桥来连通所有就好了。

所以我们可以先 \((4,4,0)\)

然后 \((2,3,1)\) 就搭好桥了,把 \((8,4)\) 的 \(2\) 送过去就好了.

Test3:

0 . . . 3 2 . 0 2 . . 0 : 5
| | |
0-0-0 . 0-0 1 0-0 . . 0 : 4
| |
0 . . . . . 3 . . . . 0 : 3
| |
0-0-0 . 0-0 1 0-0-0-0-0 : 2
| | | | | | | | | |
0-0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11 12

可以发现 \((7,x)\) 这一列必须要有人顶着.

不然中间就过不去了。

如果直接进行 \((6,5,0)\) 的话那么就必须要把两个 \(2\) 放到 \(3\) 的同一侧.

所以此时在把左侧的 \(2\) 退下去代替中间的 \(3\) 顶着 \(1\)

然后让被替代的 \(3\) 去右边,让右上的 \(2\) 落在 \(3\) 的左边。

然后一路向左推就好了

Test 4:

0 . . . . . 1 . . . 0 : 8
| |
0 . . . . . 2 . . . 0 : 7
| |
0 . . . . . 0 . . . 0 : 6
| |
0 2 . 1 . . . . . . 0 : 5
| | | |
0 2 . 1 . . . . . 2 0 : 4
| |
0-0 . 0 . . . . . 0-0 : 3
| | | | |
0-0-0-0 . 0-0-0-0-0-0 : 2
| | | | | | | | | |
0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11

让 \((7,7)\) 和 \((10,4)\) 的 \(2\) 在下平台搭一个传送带。

先把 \((4,4)\) 的块运到 \((10,4)\) 上,然后把 \((7,8)\) 的 \(1\) 运到 \((3,3)\)

剩下的就很明显了 QAQ ...

Test 5:

0 1 2 . 2-2 . . . . . 0 : 6
| |
0-0-0 . 0-0 . 0-0 . . 0 : 5
| |
0 1 2 . . . . . . . . 0 : 4
| |
0-0-0-0 . . 0 . . . 0-0 : 3
| | | | | | |
0-0-0-0-0 . 0 . . 0-0-0 : 2
| | | | | | | | |
0-0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11 12

比较明显的一个点.

\((6,6)\) 的块肯定是从右边下去了在运到左边。

那么就必须有两个块填在 \((9,3),(9,2)\) 上。

可以先让 \((3,6)\) 到 \((4,4)\) 然后再搭在 \((5,3),(6,3)\) 上。

然后就可以把 \((2,4)\) 和 \((2,6)\) 搭在 \((9,3),(9,2)\) 上啦.

Test 6:

0-0-0-0 . 3 . . . . 0 : 8
| |
0 . . . . 0-0 . . . 0 : 7
| |
0 1 . 2 . . . . . . 0 : 6
| |
0 0 . 0 . 0 . 3 . . 0 : 5
| |
0 . . . . . . 0 . 2 0 : 4
| | |
0 . . . . 1 . 0-0-0-0 : 3
| | | | |
0 . . 0-0-0-0-0-0-0-0 : 2
| | | | | | | | |
0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11

能发现 \((10,4)\) 的 \(2\) 肯定出不来。

那么就需要把 \((4,6)\) 的 \(2\) 送过去.

所以知道必须要可以让 \((5,3),(5,4),(5,5)\) 都被填满。

因为 \((5,5)\) 这个点肯定是不能通过左右平移填满的,所以一定是 \((6,8)\) 落下来。

所以需要一个高为 \(2\) 的块。

所以可以用 \((8,5)\) 的 \(3\) 垫在 \((3,2)\) 上得到 \((2,6)\) 的 \(1\).

用它和 \((6,3)\) 的 \(1\) 组合成高为 \(2\) 的块,然后事情就简单了...

Test 7:

0 . . . . . . . . . 1 0 : 7
| |
0 . . . . 2 . . . 2 0-0 : 6
| |
0 . . . . 0 . . 1-1 . 0 : 5
| |
0 . . . . . . . . 0 . 0 : 4
| | |
0-1 . . 2-0 . 0 . 0 . 0 : 3
| | | | | | |
0 0 . . 0-0 . 0 . 0 . 0 : 2
| | | | | | |
0-0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11 12

这个点也好明显QAQ.

先把 \(1\) 做成宽度为 \(3\) 的块塞到左边去

然后再把 \(2\) 放过去.

Test 8:

0 . . . 1 . . 2 . . . 0 : 7
| |
0 . . . 0 . . 0 . . . 0 : 6
| | | |
0 . . . 2 . . 1 . . . 0 : 5
| |
0 1 . . . . . . . . 2 0 : 4
| |
0-0 1 . . . . . . 2 0-0 : 3
| | | |
0-0-0 . . . . . . 0-0-0 : 2
| | | | | |
0-0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11 12

感觉这个点比较难,,当时打了好久 QAQ..

可以发现上面挂着两个果冻,一般给人的直觉是要做两个高度 \(3\) 的块去够。

不过需要同时交换位置。。

所以就怎么玩都玩不出来。。。

其实够到它不一定要三连块,,可以造出一个弯曲的形状。。

给出中间和最终局面,,应该就比较明显了。。

0 . . . 1 . . 2 . . . 0 : 7
| |
0 . . . 0 . . 0 . . . 0 : 6
| | | |
0 . . . 2 . . 1 . . . 0 : 5
| |
0 . . . . . 2 . . . . 0 : 4
| |
0-0 . . . 1-1 . . . 0-0 : 3
| | | |
0-0-0 . . . 2 . . 0-0-0 : 2
| | | | | |
0-0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11 12
0 . . . . . . . . . . 0 : 7
| |
0 . . . 0 . . 0 . . . 0 : 6
| | | |
0 . . . 2 . . 1 . . . 0 : 5
| | | |
0 . . . 2 . . 1 . . . 0 : 4
| | | |
0-0 . . 2 . 1-1 . . 0-0 : 3
| | | | |
0-0-0 . 2 . . . . 0-0-0 : 2
| | | | | |
0-0-0-0-0-0-0-0-0-0-0-0 : 1
1 2 3 4 5 6 7 8 9 10 11 12

剩下的点留坑

Checker

#include<bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define mp make_pair
#define pb push_back
#define rep(i,a,n) for(int i=(a);i<=(n);++i)
#define SZ(x) ((int)(x).size())
typedef pair<int,int> pii;
const int DX[]={-1,1,0,0},DY[]={0,0,1,-1};
const int N=55,M=111111;
FILE * input_data;
int l,m,n,t,C,x,y,z;
int a[N][N],tmp[N][N],sv[N][N];
enum MODENUM{Full,Score}MODE;
FILE *msg;
void get(int &p){
int x;for(x=fgetc(input_data);(x<'0'||x>'9')&&x!='|'&&x!='-'&&x!='.'&&x!=' ';x=fgetc(input_data));
if(x=='|'||x=='-')p=1;else if(x=='.'||x==' ')p=0;else if(x=='0')p=-1;else p=x-'0';
}
queue<pii>Q;
int bo,err;
void dfs1(int x,int y,int z){
if(x<1||x>2*n-1||y<1||y>2*m-1)return;if(!a[x][y])return;
if(a[x][y]==-1)bo=0;
tmp[x+DX[z]*2][y]=a[x][y];a[x][y]=0;
rep(i,0,3)dfs1(x+DX[i],y+DY[i],z);
if(a[x+DX[z]*2][y])Q.push(mp(x+DX[z]*2,y));
}
void dfs2(int x,int y){
if(x<1||x>2*n-1||y<1||y>2*m-1)return;if(!a[x][y])return;
if(tmp[x][y])return;tmp[x][y]=1;
rep(i,0,3)dfs2(x+DX[i],y+DY[i]);
dfs2(x,y+2);
}
void move(int x,int y,int z){
if(!a[2*x-1][2*y-1]){puts("No block in this place!");err=1;return;}
bo=1;
rep(i,1,2*n-1)rep(j,1,2*m-1)tmp[i][j]=0,sv[i][j]=a[i][j];
while(Q.size())Q.pop();
dfs1(x*2-1,y*2-1,z);
while(Q.size()){pii k=Q.front();Q.pop();dfs1(k.X,k.Y,z);}
if(!bo){rep(i,1,2*n-1)rep(j,1,2*m-1)a[i][j]=sv[i][j];puts("Move Error!");err=1;return;}
rep(i,1,2*n-1)rep(j,1,2*m-1)if(tmp[i][j])a[i][j]=tmp[i][j]; while(1){
rep(i,1,2*n-1)rep(j,1,2*m-1)tmp[i][j]=0;
rep(i,1,2*n-1)rep(j,1,2*m-1)if(a[i][j]==-1)dfs2(i,j);
int bo=0;
rep(j,1,2*m-1)rep(i,1,2*n-1)if(a[i][j]&&!tmp[i][j])bo=1,a[i][j-1]=a[i][j],a[i][j]=0;
if(!bo)break;
}
rep(i,1,2*n-1)rep(j,1,2*m-1)if((i&1)&&(j&1))
rep(k,0,3)if(a[i][j]>=1&&a[i][j]<=5&&a[i][j]==a[i+DX[k]*2][j+DY[k]*2]){
a[i+DX[k]][j+DY[k]]=1;
}
if(MODE!=Score)puts("Successs!");
}
void print(FILE *x=stdout){
rep(i,1,2*m-1){
rep(j,1,2*n-1) if((i&1)&&(j&1)){
if(a[j][2*m-1-i+1]==0)fprintf(x,".");
else if(a[j][2*m-1-i+1]==-1)fprintf(x,"0");
else fprintf(x,"%c",a[j][2*m-1-i+1]+'0');
}else{
fprintf(x,"%c",a[j][2*m-1-i+1]?i&1?'-':'|':(i&1)&&(j&1)?'.':' ');
}if(i&1) fprintf(x," : %d",m-(i>>1));
fprintf(x,"\n");
}
rep(j,1,2*n-1){
if(j&1) fprintf(x,"%d",(j>>1)+1);
else fprintf(x," ");
}fprintf(x,"\n");
}
set<int>S[9];
void dfs3(int x,int y,int z){
if(x<1||x>2*n-1||y<1||y>2*m-1)return;if(a[x][y]<1||a[x][y]>5)return;
if(tmp[x][y])return;tmp[x][y]=1;
S[a[x][y]].insert(z);
rep(i,0,3)if(a[x+DX[i]*2][y+DY[i]*2]==a[x][y])dfs3(x+DX[i]*2,y+DY[i]*2,z);
}
int par;
int check(){
par=0;
rep(i,1,5)S[i].clear();int cnt=0;
rep(i,1,2*n-1)rep(j,1,2*m-1)tmp[i][j]=0;
rep(i,1,2*n-1)rep(j,1,2*m-1)if((i&1)&&(j&1)&&a[i][j]>=1&&a[i][j]<=5)dfs3(i,j,++cnt);
cnt=0;rep(i,1,5)if(SZ(S[i]))cnt+=SZ(S[i])-1;
if(cnt==1)par=1;
return cnt==0;
}
int work(string IN,string OUT){
err=0;
input_data = fopen(IN.c_str(),"r");
fscanf(input_data,"%d%d",&m,&n);rep(i,1,2*m-1)rep(j,1,2*n-1)get(a[j][2*m-1-i+1]);
rep(i,1,2*n-1)rep(j,1,2*m-1)if((i&1)&&(j&1))
rep(k,0,3)if(a[i][j]>=1&&a[i][j]<=5&&a[i][j]==a[i+DX[k]*2][j+DY[k]*2]){
a[i+DX[k]][j+DY[k]]=1;
}
FILE *out_data = fopen(OUT.c_str(),"w");
C=0;msg = stdout;
printf("Testing %s %s\n",IN.c_str(),OUT.c_str());
print(msg); while(scanf("%d%d%d",&x,&y,&z)==3){
if(x == 0 && y == 0 && z == 0) break;
fprintf(out_data,"%d %d %d\n",x,y,z);
++C;if(MODE!=Score)printf("operation %d: ",C);
fprintf(msg,"after operation %d:\n",C);
if(x<1||x>n||y<1||y>m||z!=0&&z!=1){puts("Argument Error!");return 0;}
move(x,y,z);
if(err) return 0;
print(msg);
if(check())break;
}fclose(out_data);
rep(i,1,3)fprintf(msg,"\n");
if(MODE!=Score){
puts("");
if(check()){printf("Congratulations!\nYou completed the game in %d steps.\n",C);return 0;}
else if(par)printf("WA but you can get 1 score.\n");
else printf("WA\n");
puts("\nFinal State:");
print();
}else{
if(check())printf("OK, step:%d\n",C);
else if(par)puts("Scored 1pt");
else printf("WA\n");
}
}
int main(int argc,char **argv){
msg=fopen("report.out","w");
if(argc==1){
assert(0);
MODE=Score;
rep(i,1,20){
stringstream sin,sout;sin<<"C"<<i<<".in";sout<<"C"<<i<<".out";
printf("test %d: ",i);
work(sin.str(),sout.str());
}
}
if(argc==2){
MODE=Full;
stringstream sin,sout;sin<<"C"<<argv[1]<<".in";sout<<"C"<<argv[1]<<".out";
work(sin.str(),sout.str());
}
if(argc==3){
assert(0);
MODE=Full;
work(argv[1],argv[2]);
}
return 0;
}

运行的时候需要传入测试点编号,然后在终端输入即可得到反馈.

输入的所有信息会自动保存到对应的 .out 文件里.

如何手玩5h uoj215 果冻运输得到 AC的更多相关文章

  1. Cocos2d-Lua (练手) 微信打飞机

    学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西.   一.子弹效果          子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...

  2. UNR #1 题解

    A. 争夺圣杯 还是想说一下,这题是原题啊...想做的人可以戳codechef上的MTMXSUM(懒得贴链接了,套了个壳,不过正常人应该都能看得出来) 显然异或输出没什么奇怪的性质... 考虑一个元素 ...

  3. NOI前的考试日志

    4.14 网络流专项测试 先看T1,不会,看T2,仙人掌???wtf??弃疗.看T3,貌似最可做了,然后开始刚,刚了30min无果,打了50分暴力,然后接着去看T1,把序列差分了一下,推了会式子,发现 ...

  4. noip2017爆炸记——题解&总结&反省(普及组+提高组)

    相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...

  5. thusc2016游记&&滚粗记&&酱油记

    #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/w ...

  6. CTSC2016&&APIO2016滚粗记&&酱油记&&游记<del>(持续更新)</del>

    挖一波坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs. ...

  7. OI再见

    以下是一只蒟蒻的回忆: 1.进入高一 小县城不重视OI,直到进了高中才知道有OI这个东西,于是我就开始了OI…(看,够弱的吧,相信你是小学就开始学了) 学了几天Pascal语法后,被老师报上了NOIP ...

  8. NOIp2018停课刷题记录

    Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...

  9. CTSC&APIO2018游记

    Day-1 布吉岛干什么,好像只看了Splay Day0 再次布吉岛干什么,好像也只看了Splay 然后上了火车 wc没买方便面,只能吃40元的盒饭 半夜睡不着,那应该是我太菜了 Day1 九点下火车 ...

随机推荐

  1. Linux yum源地址

    ----------------------------------Linux yum源地址------------------------------ Zabbix 3.0 yum源 rpm -iv ...

  2. jQuery双向滑动杆 设置数值百分比

    在线演示 本地下载

  3. tomcat常用配置详解和优化方法

    tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...

  4. Luogu-5004 专心OI-跳房子(矩阵快速幂)

    Luogu-5004 专心OI-跳房子(矩阵快速幂) 题目链接 题解: 先考虑最朴素的dp 设\(f[i][0/1]\)表示第\(i\)个位置跳/不跳的方案数,则: \[ \begin{cases} ...

  5. sql行列互换

    出现这个结果: sql如下: end) as erjidu from a GROUP BY y;

  6. Hive-开启动态分区

    开启动态分区 --开启动态分区 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict ...

  7. cmd常用命令大全

    cmd命令提示符:只是系统模拟的dos操作环境,且功能远远大于dos 1. 返回上一层 cd.. 2. 进入A文件夹  cd A 3. 进入A文件夹下的B文件夹   cd  A/B 4. c盘下的A文 ...

  8. eclipse中去掉警告提示

    有时候我们要去掉这些不必要的提示 下面我们来设置去掉这些警告提示

  9. 把本地jar包发布到maven私服和本地maven库

    有时时候下载了jar包,但发现maven库里没有,可以将jar包上传到本地私服和本地maven库: 1.上传到本地私服 mvn deploy:deploy-file -Dfile=D:\GETUI_S ...

  10. python学习笔记(excel简单操作)

    现在的目标是设计一个接口自动化测试框架 用例写在excel里面 利用python自带的pyunit构建 之前已经安装好了处理excel的模块 这次简单的使用下 提前创建好excel文件 “testca ...