ITPub博客

首页 > 应用开发 > > 求大神看看为什么不能用typedef long long ll?

求大神看看为什么不能用typedef long long ll?

作者:markriver 时间:2019-08-19 17:23:19 0 删除 编辑

代码有点长,但是出问题在typedef long long ll;(第11行),我想知道为什不不能用typedef long long ll;难道非得用#define ll long long吗?

1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<ext/pb_ds/assoc_container.hpp>
 6 #include<ext/pb_ds/hash_policy.hpp>
 7 using namespace __gnu_pbds;
 8 using namespace std;
 9 const int maxn=200000+5;
10 const int B=200191;
11 typedef long long ll;
12 int read()
13 {
14     int x=0,f=1;char ch=getchar();
15     while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();}
16     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
17     return x*f;
18 }
19 unsigned long long mul[maxn],s1[maxn],s2[maxn];
20 int n,mx,num;
21 int a[maxn],b[maxn];
22 gp_hash_table<unsigned ll,bool>mp;
23 unsigned ll gethash(int l,int r)
24 {
25     unsigned ll t;
26     if(l<=r) t=s1[r]-s1[l-1]*mul[r-l+1];
27     else
28     t=s2[r]-s2[l+1]*mul[l-r+1];
29     return t;
30 }
31 void solve(int x)
32 {
33     if(mx*x>n) return;
34     int ans=0;
35     mp.clear();
36     for(int i=1;i<=n;i+=x)
37     if(i+x-1<=n)
38     {
39         unsigned ll t=gethash(i,i+x-1)*gethash(i+x-1,i);
40         if(mp[t]) continue;
41         else ans++;
42         mp[t]=1;
43     }
44     if(ans>mx) mx=ans,num=0;
45     if(ans==mx) b[++num]=x;
46 }
47 int main()
48 {
49     n=read();
50     for(int i=1;i<=n;i++) a[i]=read();
51     mul[0]=1;
52     for(int i=1;i<=n;i++) mul[i]=mul[i-1]*B;
53     for(int i=1;i<=n;i++)
54         s1[i]=s1[i-1]*B+a[i];
55     for(int i=n;i>=1;i--)
56         s2[i]=s2[i+1]*B+a[i];
57     for(int i=1;i<=n;i++) solve(i);
58     printf("%d %d\n",mx,num);
59     for(int i=1;i<=num;i++)
60     {
61         printf("%d",b[i]);
62         if(i!=num) printf(" ");
63     }
64     return 0;
65 }
66


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/818/viewspace-3171080/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-03

  • 博文量
    502
  • 访问量
    18493