社区讨论

造福后人

AT_joisc2017_e 壊れた機器 (Broken Device)参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@m5f98vch
此快照首次捕获于
2025/01/02 19:40
去年
此快照最后确认于
2025/11/04 12:03
4 个月前
查看原帖
在你的代码的前面加入如下代码可以实现自动测试:
CPP
#ifdef ONLINE_JUDGE
#include "Broken_device_lib.h"
#else
#include <algorithm>
#include <iostream>
#include <random>
void Anna(int,long long,int,int []);
long long Bruno(int,int []);
namespace Judge{
	int n,k,a[1000],p[1000],fl[1000],broken[1000];
	long long x;
	void output(int typ,long long num){
		if(typ==1)
			std::cout<<"Error:There is no position "<<num<<".\n";
		if(typ==2)
			std::cout<<"Error:Position "<<num<<" has been set more than once.\n";
		if(typ==3)
			std::cout<<"Error:Number "<<num<<" out of range.\n";
		if(typ==4)
			std::cout<<"Error:Position "<<num<<" has not been set.";
		if(typ==5)
			std::cout<<"Error:Expected "<<x<<",but found "<<num<<".\n";
		std::cout<<"On this case:\n";
		std::cout<<n<<' '<<x<<' '<<k<<'\n';
		for(int i=0;i<k;i++) std::cout<<p[i]<<' ';
		std::cout<<"\n";
		exit(0);
	}
}
void Set(int pos,int bit){
	if(pos<0||pos>=Judge::n) Judge::output(1,pos);
	if(Judge::fl[pos]==1) Judge::output(2,pos);
	if(bit!=0&&bit!=1) Judge::output(3,bit);
	Judge::fl[pos]=1;
	if(Judge::broken[pos]&&bit){
		std::cout<<"Warning:Position "<<pos<<" is broken,but your program sets it to 1.\n";
		return;
	}
	Judge::a[pos]=bit;
}
int main(){
	std::mt19937_64 random(time(0));
	int T=1000;
	while(T--){
		Judge::n=150,Judge::k=40;
		for(int i=0;i<Judge::n;i++) Judge::a[i]=Judge::fl[i]=Judge::broken[i]=0;
		Judge::x=random()%1000000000000000001ll;
		for(int i=0;i<Judge::k;i++){
			Judge::p[i]=random()%Judge::n;
			Judge::broken[Judge::p[i]]=1;
		}
		std::sort(Judge::p,Judge::p+Judge::k);
		Judge::k=std::unique(Judge::p,Judge::p+Judge::k)-Judge::p-1;
		Anna(Judge::n,Judge::x,Judge::k,Judge::p);
		for(int i=0;i<Judge::k;i++) Judge::a[Judge::p[i]]=0;
		for(int i=0;i<Judge::n;i++){
			if(Judge::fl[i]==0) Judge::output(4,i);
		}
		long long ret=Bruno(Judge::n,Judge::a);
		if(ret!=Judge::x) Judge::output(5,ret);
	}
	std::cout<<"Accepted,time:"<<clock()*1000.0/CLOCKS_PER_SEC<<" ms\n";
	return 0;
}
#endif
注意此为本人自己编写的代码,可能有误,锅了踢我。并且数据随机生成,不保证强度。

回复

6 条回复,欢迎继续交流。

正在加载回复...