結果
問題 |
No.1746 Sqrt Integer Segments
|
ユーザー |
![]() |
提出日時 | 2021-11-18 06:52:03 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 373 ms / 2,000 ms |
コード長 | 1,104 bytes |
コンパイル時間 | 2,430 ms |
コンパイル使用メモリ | 206,452 KB |
最終ジャッジ日時 | 2025-01-25 19:17:32 |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 28 |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> #include <atcoder/modint> using namespace atcoder; using mint = modint1000000007; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 unsigned long xor128() { static unsigned long x=123456789, y=362436069, z=521288629, w=88675123; unsigned long t=(x^(x<<11)); x=y; y=z; z=w; return (w=(w^(w>>19))^(t^(t>>8))); } vector<long long> get(){ vector<long long> h(1000001,0); rep(i,h.size())h[i] = xor128(); vector<long long> a(1000001,0); vector<bool> f(1000001,true); for(int i=2;i<a.size();i++){ if(!f[i])continue; long long t = i; while(t<a.size()){ for(long long j=t;j<a.size();j+=t){ f[j] = false; a[j] ^= h[i]; } t *= i; } } return a; } int main(){ auto a = get(); auto b = get(); int n; cin>>n; pair<long long,long long> sum(0,0); long long ans = 0LL; map<pair<long long,long long>,long long> mp; mp[sum] ++; rep(i,n){ long long x; cin>>x; sum.first ^= a[x]; sum.second ^= b[x]; ans += mp[sum]; mp[sum]++; } cout<<ans<<endl; return 0; }