题解 P1056 【排座椅】
我写了个对拍(大佬请避开)。
(这洛谷真叼,把我逼急了。写了对拍来看自己程序的BUG,为啥只能下一次数据还只能下第一WA)。
首先这道题我还没AC,气死我了,一定是数据坑卡掉了我的快拍(好吧其实我不会用快拍。。)。
为啥洛谷非要解释不能光要注释啊。。。算了。
神奇的生成数据
1:把题意反过来看,譬如给一个(2<=N,M<=2000),你就创建一个这样的数据就O了。
2:生成数据时同时满足题目条件,譬如保证两个人相邻(虽然关于图论生成数据我不会。。。。。。。(;´д`)ゞ)。
//生成数据代码
//试试自己生成数据
//第一次,难免会坑死。题又不对套。。。。。。
//酱油酱的成长路。。。。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<iostream>
int main()
{
// freopen("data.in","w",stdout);
srand((unsigned)time(0));
int M,N,K,L,D;
D=rand()%(1999-20+1)+20;
M=rand()%(1999-20+1)+20;
N=rand()%(1999-20+1)+20;
K=rand()%(M-30)+20;
L=rand()%(N-30)+20;
printf("%d %d %d %d %d\n",M,N,K,L,D);
for(int i=1;i<=D;i++)
{
int j=rand()%100;
int j2=rand()%2;
int x=rand()%(M-20+1)+20;
int y=rand()%(N-20+1)+20;
if(49>=j)//修改与j的比较值可以更改出横向还是纵向的组数多少
{/*横定竖动*/
int py=j>24?y-1:y+1;
if(!j2)printf("%d %d %d %d\n",x,y,x,py);//模拟样例中第三组人数据的坑
else printf("%d %d %d %d\n",x,py,x,y);
}
else
{/*竖定横动*/
int px=j>74?x-1:x+1;
if(!j2)printf("%d %d %d %d\n",x,y,px,y);//模拟样例中第三组人数据的坑
else printf("%d %d %d %d\n",px,y,x,y);
}
}
}
神奇的对拍
1:不会,看不懂?背吧。
2:注意文件的后缀名,以及文件名是你自己的。
3:注意头文件<windows.h>
上代码:
//windows 下手写对拍;
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
while(1)
{
system("data.exe>data.in");//生成数据丢进去
system("std.exe<data.in>std.out");//生成后丢进标程
system("myprogram.exe<data.in>my.out");//使劲把数据擩进去//自己的程序
if(system("fc std.out my.out"))// 注意空格,fc是比较标志,有误返回1
{
system("pause");
printf("圣柠檬数据卡掉了我\n");//这时就可以去检查data.in了看看是啥卡掉了我
//break;
}
}
}
以上是洛谷把我逼急了的结果。我就笑笑 ̄へ ̄。