求助 关于昨天cf的e1
  • 板块学术版
  • 楼主Position
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/3/18 09:22
  • 上次更新2023/11/5 01:56:18
查看原帖
求助 关于昨天cf的e1
38096
Position楼主2021/3/18 09:22
for(int j=2;j*j<=x;j++){
   int cnt=0;
   while(x%j==0) x/=j,cnt^=1;
   hsh+=pw(2333,mp[j])*cnt;
}

为什么这么写会tle

for(int j=2;j*j<=x;j++){
   int cnt=0;
   while(x%j==0) x/=j,cnt^=1;
   if(cnt) hsh+=pw(2333,mp[j]);
}

但改成这样就好了

这个是完整代码

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define db double
#define rep(x,a,b) for(int x=(a);x<=(b);x++)
#define per(x,a,b) for(int x=(a);x>=(b);x--)
#define scf(a) scanf("%d",&a)
#define scfll(a) scanf("%lld",&a)
#define scfdb(a) scanf("%lf",&a)
#define ptf(a) printf("%d",a)
#define ptfll(a) printf("%lld",a)
#define ptfdb(x,a) printf("%x.lf",a)
#define ptfsp(a) printf("%d ",a)
#define ptfllsp(a) printf("%lld ",a)
#define ptfdbsp(x,a) printf("%x.lf ",a)
#define pli(a,b) make_pair(a,b)
#define pb push_back
#define el puts("")
#define pi 3.1415926
using namespace std;
const ll mod=1e9+7;
const int maxn=1e7+5;
int mp[maxn];
int prime[maxn],num=0;
bool vis[maxn];
void init(int n){
    for(int i=2;i<=n;i++){
        if(!vis[i]) prime[++num]=i,mp[i]=num;
        for(int j=1;j<=num;j++){
            if(i*prime[j]>n) break;
            vis[i*prime[j]]=1;
            if(i%prime[j]==0) break;
        }
    }
}
ull pw(ull a,ull n){
    ull ans=1,base=a;
    while(n){
        if(n&1) ans=ans*base;
        base=base*base;
        n>>=1;
    }
    return ans;
}
ull a[200005];
set<ull>st;
int main(){
    init(1e7);
    ull aa=3;
    aa=aa*0;
    cout<<aa;
   // cout<<num<<endl;
    int T;scf(T);
    while(T--){
        int n;scf(n);
        int k;scf(k);
        rep(i,1,n){
            int x;scf(x);
            ull hsh=0;
            for(int j=2;j*j<=x;j++){
                int cnt=0;
                while(x%j==0) x/=j,cnt^=1;
                if(cnt) hsh+=pw(2333,mp[j]);
            }
            if(x!=1) hsh+=pw(2333,mp[x]);
            a[i]=hsh;
        }
        int ans=0;
        st.clear();
        rep(i,1,n){
            if(st.count(a[i])){
                ans++;
                st.clear();
            }
           st.insert(a[i]);
        }
        ptf(ans+1);el;
    }
}

2021/3/18 09:22
加载中...