QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#292070#7780. Dark LaTeX vs. Light LaTeXucup-team902WA 924ms199640kbC++204.0kb2023-12-27 17:08:532023-12-27 17:08:53

Judging History

你现在查看的是最新测评结果

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2023-12-27 17:08:53]
  • 评测
  • 测评结果:WA
  • 用时:924ms
  • 内存:199640kb
  • [2023-12-27 17:08:53]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define cs const
#define re register
#define pb push_back
#define pii pair<int,int>
#define ll long long
#define y1 shinkle
#define fi first
#define se second
#define bg begin
namespace IO{
#define gc getchar
inline int read(){
    char ch=gc();
    int res=0;bool f=1;
    while(!isdigit(ch))f^=ch=='-',ch=gc();
    while(isdigit(ch))res=(res*10)+(ch^48),ch=gc();
    return f?res:-res;
}
inline ll readll(){
    char ch=gc();
    ll res=0;bool f=1;
    while(!isdigit(ch))f^=ch=='-',ch=gc();
    while(isdigit(ch))res=(res*10)+(ch^48),ch=gc();
    return f?res:-res;
}
inline char readchar(){
	char ch=gc();
	while(isspace(ch))ch=gc();
	return ch;
}
inline int readstring(char *s){
	int top=0;char ch=gc();
	while(isspace(ch))ch=gc();
	while(!isspace(ch)&&ch!=EOF)s[++top]=ch,ch=gc();
	s[top+1]='\0';return top;
}

}
using IO::read;
using IO::readll;
using IO::readchar;
using IO::readstring;
template<typename tp>inline void chemx(tp &a,tp b){(a<b)?(a=b):0;}
template<typename tp>inline void chemn(tp &a,tp b){(a>b)?(a=b):0;}

cs int bs1=173,bs2=17;  
cs int mod1=1e9+7,mod2=998244353;
cs int N=5005;

char s[N],t[N];
struct Map{
	static cs int mod=20003;
	int val[mod];ll key[mod];
    int stk[mod],top;
	Map(){memset(key,-1,sizeof(key));}
    void clear(){
        while(top){
            val[stk[top]]=0,key[stk[top]]=-1;
            top--;
        }
    }
	cs int &operator [](cs ll &k)cs{
		int p=k%mod;
		while((~key[p])&&(key[p]!=k))p=(p==mod-1)?0:(p+1);
		return val[p];
	}
	int &operator [](cs ll &k){
		int p=k%mod;
		while((~key[p])&&(key[p]!=k))p=(p==mod-1)?0:(p+1);
		if(key[p]!=k)key[p]=k,stk[++top]=p;
		return val[p];		
	}
}res;
ll ans;
int pre[N][N];
int lcp[N][N];
void solve(char *s,char *t,int tmp){
    int n=strlen(s+1),m=strlen(t+1);
    memset(pre,0,sizeof(pre));
    memset(lcp,0,sizeof(lcp));
    for(int i=n;i;i--)
    for(int j=i;j<=n;j++){
        if(s[i]==s[j])lcp[i][j]=lcp[i+1][j+1]+1;
        else lcp[i][j]=0;
    }
    ll del1=1,del2=1;
    for(int l=1;l<=min(n,m);l++){
		res.clear();
		ll vl1=0,vl2=0;del1=del1*bs1%mod1,del2=del2*bs2%mod2;
		for(int i=1;i<=l;i++){
            vl1*=bs1;
            vl1+=t[i]-'a';
            vl1%=mod1;
            vl2*=bs2;
            vl2+=t[i]-'a';
            vl2%=mod2;
		}
        ++res[vl1];
		for(int i=l+1;i<=m;i++){
            vl1*=bs1;
            vl1-=del1*(t[i-l]-'a');
            vl1+=t[i]-'a';
            vl1=(vl1%mod1+mod1)%mod1;
            vl2*=bs2;
            vl2-=del2*(t[i-l]-'a');
            vl2+=t[i]-'a';
            vl2=(vl2%mod2+mod2)%mod2;
            ++res[vl1];
		}
		vl1=vl2=0;
		for(int i=1;i<=l;i++){
            vl1*=bs1;
            vl1+=s[i]-'a';
            vl1%=mod1;
            vl2*=bs2;
            vl2+=s[i]-'a';
            vl2%=mod2;
		}
        pre[l][1]=res[vl1];
		for(int i=l+1;i<=n;i++){
            vl1*=bs1;
            vl1-=del1*(s[i-l]-'a');
            vl1+=s[i]-'a';
            vl1=(vl1%mod1+mod1)%mod1;
            vl2*=bs2;
            vl2-=del2*(s[i-l]-'a');
            vl2+=s[i]-'a';
            vl2=(vl2%mod2+mod2)%mod2;
            pre[i][i-l+1]=res[vl1];
		}
    }
    // for(int i=1;i<=n;i++,puts(""))
    // for(int j=1;j<=n;j++)cout<<pre[i][j]<<" ";
    for(int i=1;i<=n;i++)
    for(int j=i;j;j--)pre[i][j]+=pre[i][j+1];
    // for(int i=1;i<=n;i++,puts(""))
    // for(int j=1;j<=n;j++)cout<<pre[i][j]<<" ";
    for(int i=1;i<=n;i++)
    for(int j=i+1;j<=n+1;j++){
        int len=min(lcp[i][j],j-i);
        int p1=i+len,p2=i+tmp;
      //  cout<<i<<" "<<j<<" "<<lcp[i][j]<<" "<<len<<" "<<p1<<" "<<p2<<" "<<pre[j-1][p2]<<" "<<pre[j-1][p1+1]<<'\n';
        
        if(p2<=p1)ans+=pre[j-1][p2]-pre[j-1][p1+1];
    }
}

int main(){
	#ifdef Stargazer
	freopen("1.in","r",stdin);
	#endif
	int x1=readstring(s);
	int x2=readstring(t);
	solve(s,t,0);
   // cout<<ans<<'\n';
    //exit(0);
	solve(t,s,1);
	cout<<ans<<'\n';
 //   cerr<<clock()-tt<<'\n';
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 29ms
memory: 199564kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 36ms
memory: 199528kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 16ms
memory: 199640kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 35ms
memory: 199440kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 27ms
memory: 199620kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1161

result:

ok 1 number(s): "1161"

Test #6:

score: 0
Accepted
time: 924ms
memory: 199552kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

78156256250000

result:

ok 1 number(s): "78156256250000"

Test #7:

score: 0
Accepted
time: 52ms
memory: 199512kb

input:

gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...

output:

60716448

result:

ok 1 number(s): "60716448"

Test #8:

score: 0
Accepted
time: 72ms
memory: 199536kb

input:

mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...

output:

60679828

result:

ok 1 number(s): "60679828"

Test #9:

score: -100
Wrong Answer
time: 893ms
memory: 199580kb

input:

vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...

output:

2655796926

result:

wrong answer 1st numbers differ - expected: '2655796915', found: '2655796926'