QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#547482#858. GCD vs. XORRafat_KabirRE 241ms57068kbC++204.5kb2024-09-04 22:04:022024-09-04 22:04:02

Judging History

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

  • [2024-09-04 22:04:02]
  • 评测
  • 测评结果:RE
  • 用时:241ms
  • 内存:57068kb
  • [2024-09-04 22:04:02]
  • 提交

answer

#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
#include <time.h>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <cstring>

using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <iostream>

using namespace __gnu_pbds;
using namespace std;
template <class T>
using Tree =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
// to erase in multiset-> less_equal<T> and 
// s.erase(s.find_by_order(s.order_of_key(x)))
// lower_bound(x)=>(cannot use the stl lower_bound function)
// ll idx = s.order_of_key(x)
// if(idx == s.size()) -> no lower_bound
// else lb = *s.find_by_order(idx) // as 0-indexing
// idx-1 will give highest value which is strictly less than x
// for upper_bound->do the same with (x+1)

typedef long long ll;
typedef long double ld;
typedef pair<int,int> p32;
typedef pair<ll,ll> p64;
typedef tuple<ll, ll, ll> t64;
typedef vector<t64> vt64;
typedef vector<vt64> vvt64;
typedef pair<double,double> pdd;
typedef vector<ll> v64;
typedef vector<int> v32;
typedef vector<vector<int> > vv32;
typedef vector<vector<ll> > vv64;
typedef vector<vector<p64> > vvp64;
typedef vector<p64> vp64;
typedef vector<p32> vp32;
typedef vector<vector<p32> > vvp32;
typedef vector<bool> vb;
ll mod =  1e9+7, MOD = 998244353;
double eps = 1e-12;
// #define forn(i,e) for(ll i = 0; i < e; i++)
#define FOR(s, e, i) for(int i = s; i <= e; i++)
// #define rforn(i,s) for(ll i = s; i >= 0; i--)
#define ROF(s ,e, i) for(int i = s; i >= e; i--)
#define coutAll(A) for(auto asdafas : A) cout <<  asdafas << " "; cout << "\n";
#define foutAll(A) for(auto asdafas : A) fout <<  asdafas << " "; cout << "\n";
#define cinAll(A) for(auto &asdafas : A) cin >>  asdafas;
#define finAll(A) for(auto &asdafas : A) fin >>  asdafas;
#define minpq priority_queue<ll, v64, greater<ll>>
#define maxpq priority_queue<ll> 
#define ln "\n"
#define dbg(x) cout<<#x<<" = "<<x<<ln
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define fi first
#define se second
ll inf = LLONG_MAX;
#define fast_cin() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define sz(x) ((ll)(x).size())
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
using namespace std;
typedef long long ll;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef pair<ll, ll> pll;
typedef pair<ll, ll> pii;
#define MAXN 1000001

void solve(int it)
{
    // freopen("test.txt", "w", stdout);
    // vector<set<int>> A(MAXN);
    // vv32 A(MAXN);
    vv32 same(MAXN);
    FOR(1, MAXN-1, i){
        int x = i;
        while(x <= MAXN-1){
            // A[i].pb(x);
            int nxt = x ^ i;
            if(nxt > x && __gcd(x, nxt) == i){
                same[x].pb(nxt);
            }
            x += i;
        }
    }
    // FOR(1, MAXN-1, i){
    //     sort(all(same[i]));
    //     FOR(1, (int)same[i].size()-1, j){
    //         if(same[i][j] != same[i][j-1]) cout << "YES";
    //     }
    // }
    // coutAll(same[100]);
    // cout << "done\n";
    // ll sum = 0;
    // FOR(1, MAXN-1, i){
    //     // cout << i << "->";
    //     // coutAll(A[i]);
    //     sum += A[i].size();
    // }
    // cout << sum;
    // FOR(1, MAXN-1, i){
    //     for(auto x : A[i]){
    //         if((x < (x^i)) && __gcd(x, (x^i)) == i){
    //             same[x].pb(x^i);
    //         }
    //     }
    //     // cout << i << "\n";
    // }
    // cout << "done\n";
    // coutAll(same[100]);
    // FOR(1, MAXN-1, i){
    //     sort(all(same[i]));
    //     same[i].erase(unique(all(same[i])),  same[i].end());
    // }
    // coutAll(same[100]);
    // coutAll(same[100]);
    // ll sum =0;
    // FOR(1, MAXN-1, i) sum = max(sum, (ll)same[i].size());
    // cout << sum;
    int t;
    cin >> t;
    while(t--){
        int n; cin >> n;
        v64 cnt(MAXN, 0);
        FOR(0, n -1 , i){
            int x; cin >> x;
            cnt[x]++;
        }
        ll ans = 0;
        FOR(1, MAXN-1, i){
            for(auto x : same[i]){
                ans += 1LL*cnt[x]*cnt[i];
            }
        }
        cout << ans << "\n";
    }



}


int main()
{
    fast_cin();    
    ll t = 1;
    // cin >> t;
    for(int it=1; it<=t; it++)
    {
        //cout << "Case " << it << ": ";
        solve(it);
    }
    return 0;
}


詳細信息

Test #1:

score: 100
Accepted
time: 241ms
memory: 57068kb

input:

1
4
2 3 4 3

output:

2

result:

ok 1 number(s): "2"

Test #2:

score: -100
Runtime Error

input:

20
43
128 66 452 384 400 441 232 203 228 33 284 156 128 190 197 292 388 31 179 343 147 206 450 284 180 73 273 130 168 250 405 203 235 340 309 28 267 395 152 191 295 463 344
54
48 7 12 37 49 24 5 18 15 37 26 57 53 59 22 10 2 16 36 52 64 1 56 42 38 46 53 7 2 8 60 38 54 11 19 50 20 61 6 50 27 5 26 3 4 ...

output:


result: