8.19 Div2 CE求助(一定要看下去)
  • 板块学术版
  • 楼主SpeMars
  • 当前回复14
  • 已保存回复14
  • 发布时间2021/8/19 19:37
  • 上次更新2023/11/4 10:00:50
查看原帖
8.19 Div2 CE求助(一定要看下去)
374929
SpeMars楼主2021/8/19 19:37

请务必看完,谢谢大佬%%%

以下为Round 2 周年欢乐赛 Div.2 T4 60pts代码

单调栈+两个特殊情况骗分

#include<cstdio>
using namespace std;
typedef long long ll;
const ll N=1e7+10;
ll n,xn,k,ti,tmp,x[N],s[N],feb[N],top;
ll k2(ll x){
	for(ll i=1;i<=100;++i){
		if(feb[i]==x)return x;
		if(feb[i]>x)return k2(x-feb[i-1]);
	}
}
int main(){
	scanf("%lld%lld",&n,&k);
	feb[1]=feb[2]=1;
	for(ll i=3;i<=110;++i)feb[i]=(feb[i-1]+feb[i-2]);
	if(k==1){
		printf("%lld\n",(n&(-n)));
		return 0;
	}
	if(k==2){
		printf("%lld\n",k2(n));
		return 0;
	}
	x[1]=1;
	s[++top]=1;
	for(ll i=2;i<=n;++i){
		tmp=0;
		for(;top&&((s[top]+(x[s[top]]-1)/k)<i);--top);
		if(top)tmp=s[top];
		x[i]=i-tmp;
		s[++top]=i;
	}
	printf("%lld\n",x[n]);
	return 0;
}

但是数组初始时改为 x[N]x[N]={ 00 , 11 }后就CE了

本地编译也慢了很多

编译错误0pts 代码如下

#include<cstdio>
using namespace std;
typedef long long ll;
const ll N=1e7+10;
ll n,xn,k,ti,tmp,x[N]={0,1},s[N],feb[N],top;
ll k2(ll x){
	for(ll i=1;i<=100;++i){
		if(feb[i]==x)return x;
		if(feb[i]>x)return k2(x-feb[i-1]);
	}
}
int main(){
	scanf("%lld%lld",&n,&k);
	feb[1]=feb[2]=1;
	for(ll i=3;i<=110;++i)feb[i]=(feb[i-1]+feb[i-2]);
	if(k==1){
		printf("%lld\n",(n&(-n)));
		return 0;
	}
	if(k==2){
		printf("%lld\n",k2(n));
		return 0;
	}
	s[++top]=1;
	for(ll i=2;i<=n;++i){
		tmp=0;
		for(;top&&((s[top]+(x[s[top]]-1)/k)<i);--top);
		if(top)tmp=s[top];
		x[i]=i-tmp;
		s[++top]=i;
	}
	printf("%lld\n",x[n]);
	return 0;
}

有大佬知道这是为什么吗,第一次遇到

问一下各位OIer有同样情况吗?

2021/8/19 19:37
加载中...