社区讨论

【灵异事件】本机秒出答案,交上去T

P3823[NOI2017] 蚯蚓排队参与者 3已保存回复 7

讨论操作

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

当前回复
7 条
当前快照
1 份
快照标识符
@lo8jnnn0
此快照首次捕获于
2023/10/27 19:42
2 年前
此快照最后确认于
2023/10/27 19:42
2 年前
查看原帖
就是第一个点,我把数据下载下来,在本机运行,发现不会T,但是交上去就是T了,以及在loj上连样例都T了,怎么回事?
CPP
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
  long long x=0,f=1;char ch=getchar();
  while(!isdigit(ch)&&ch!='-')ch=getchar();
  if(ch=='-')f=-1,ch=getchar();
  while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
  return x*f;
}
unsigned long long vv,px,sx,x,pw[1001010];
long long P,ans,uued,suf[1001010],pre[1001010],K,len,id[1001010];
char S[1001010];
int d[30001010],b[10001010],c[10001010];
unsigned long long a[10001010];
int j,cnt,num,opt,tnum,fre[20],Testing,u,v,n,m,p,i,MOD,up,start[1001010],Kend[1001010],V[1001010];
void Insert(unsigned long long X){
	int now=X % P;
	for (int i=d[now];i;i=b[i]) if (a[i]==X) {c[i]++;return ;}
	cnt++;a[cnt]=X;c[cnt]=1;b[cnt]=d[now];d[now]=cnt;
}
void Delete(unsigned long long X){
	int now=X % P;
	for (int i=d[now];i;i=b[i]) if (a[i]==X) {c[i]--;return ;}
}
long long findval(unsigned long long X){
	int now=X % P;
	for (int i=d[now];i;i=b[i]) if (a[i]==X) return c[i];
}
int main()
{
	//freopen("P3823_1.in","r",stdin);
	n=read();m=read();P=19260817;p=10;up=50;pw[0]=1;
	for (i=1;i<=up;i++) pw[i]=pw[i-1]*p;
	for (i=1;i<=n;i++) id[i]=read(),fre[id[i]]++,Insert(id[i]);
    for (Testing=1;Testing<=m;Testing++){
    	opt=read();
    	if (opt==1){
    		u=read();v=read();num=0;px=sx=0;
    		for (i=v;i;i=suf[i])
    		    {
    		    	num++;px=px*p+id[i];
    		    	sx=px;tnum=num;
    		    	for (j=u;j;j=pre[j]){
    		    		sx=sx+id[j]*pw[tnum];
    		    		tnum++;Insert(sx);
    		    		if (tnum>50) break;
					}
				}
			pre[v]=u;suf[u]=v;
		}
	  if (opt==2){
	  	u=read();v=suf[u];num=0;px=sx=0;
	  	for (i=v;i;i=suf[i])
    		    {
    		    	num++;px=px*p+id[i];
    		    	sx=px;tnum=num;
    		    	for (j=u;j;j=pre[j]){
    		    		sx=sx+id[j]*pw[tnum];
    		    		tnum++;Delete(sx);
    		    		if (tnum>50) break;
					}
				}
		suf[u]=0;pre[v]=0;
	  }
	  if (opt==3){
	  	scanf("%s",S+1);K=read();len=strlen(S+1);
	  /*	if (K==1){ans=1;
	  		for (int i=1;i<=len;i++) ans=ans*fre[S[i]-'0'] % 998244353;
	  		printf("%lld\n",ans);continue;
		  }*/
	  	ans=1;vv=0;
	  	for (i=1;i<=K;i++) vv=vv*p+S[i]-'0';
	  	
	  	ans=ans*findval(vv) % 998244353;
		for (i=K+1;i<=len;i++){
			vv=(vv-(S[i-K]-'0')*pw[K-1])*p+S[i]-'0';
			ans=ans*findval(vv) % 998244353;
		} 
	  	printf("%lld\n",ans);
	  }
	}
return 0;
}



回复

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

正在加载回复...