自造交互题相关代码求调……洛谷交互题好难造QAQ
  • 板块学术版
  • 楼主hez_EX
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/6 14:08
  • 上次更新2024/3/6 17:35:11
查看原帖
自造交互题相关代码求调……洛谷交互题好难造QAQ
262620
hez_EX楼主2024/3/6 14:08

前两份代码在洛谷上,后一份为选手提交,提交后所有测试点(最高n⩽2×105n\leqslant2\times10^5,时限均为 1s)均显示 TLE,包括 908ms 的也是这样,但是报错信息不尽相同,即使返回为 ok 的也会报 TLE。

checker.cppchecker.cpp

#include "testlib.h"
#include <iostream>

using namespace std;

int main(int argc,char* argv[])
{
	setName("Move pointer");
	registerInteraction(argc,argv);
	
	/*
	 * Sample File Format
	 1 pro_n pro_g
	 2 a1 a2 a3 .... an
	*/
	int pro_n=inf.readInt(),pro_g=inf.readInt(),a[1000005],pro_p=0,pro_d=0,pro_op=0,pro_cnt=0;
	double pro_score=1;
	for(int i=0;i<pro_n;i++) a[i]=inf.readInt();
	cout<<pro_g<<endl;
	
	while(pro_cnt<=200000&&pro_p^pro_g)
	{
		pro_op=ouf.readInt();
		if(pro_op==1)
		{
			pro_d=ouf.readInt();
			pro_p+=pro_d;
			pro_p%=pro_n;
			pro_p+=pro_p<0?pro_n:0;
			cout<<a[pro_p]<<endl;
			pro_cnt++;
		}
		else
		{
			pro_d=ouf.readInt();
			cout<<pro_n<<endl;
			pro_score*=0.3;
		}
	}
	
	if(pro_cnt>3000) pro_score*=0.2;
	else if(pro_cnt>300) pro_score*=0.5;
	if(pro_cnt>200000) quitf(_wa,"Sliding times limit exceeded.");
	else if(pro_score<0.9) quitp(5*pro_score,"Some limit being broken up.");
	else quitf(_ok,"Sliding successfully.");
}

interactive_lib.cppinteractive\_lib.cpp

#include <iostream>

using namespace std;

void work();
void init(int &x)
{
	cin>>x;
}
int slide(int x)
{
	int y;
	cout<<"1 "<<x<<std::endl;
	cin>>y;
	return y;
}
int cheat()
{
	int x;
	cout<<"0"<<std::endl;
	cin>>x;
	return x;
}

int main()
{
	work();
	return 0;
}

test.cpptest.cpp

int a[400005],p=0,l,r,mid,n,g;

void init(int &x);
int slide(int x);
int cheat();

void work()
{
	
	init(g);
	a[0]=slide(0);
	a[1]=slide(1);
	while(a[1<<p>>1]<a[1<<p]) p++,a[1<<p]=slide(1<<p>>1);
	p=1<<p;l=p>>1;r=p;
	while(l+1<r)
	{
		mid=(l+r)>>1;
		a[mid]=slide(mid-p);
		if(a[l]>a[mid]) r=p=mid;
		else l=p=mid;
	}
	if(a[l]>a[r]) n=l;
	else n=r;
	slide(-p);
	l=p=0;r=n-1;
	while(true)
	{
		mid=(l+r+1)>>1;
		a[mid]=slide(mid-p);
		if(a[mid]>g) r=p=mid;
		else l=p=mid;
		if(a[p]==g) break;
	}
}
2024/3/6 14:08
加载中...