QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#495502#9156. 百万富翁TimDee#15 615ms89372kbC++174.0kb2024-07-27 21:20:262024-07-27 21:20:26

Judging History

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

  • [2024-07-27 21:20:26]
  • 评测
  • 测评结果:15
  • 用时:615ms
  • 内存:89372kb
  • [2024-07-27 21:20:26]
  • 提交

answer

#include "richest.h"
#include <bits/stdc++.h>
using namespace std;
#define forn(i,n) for(int i=0; i<(n); ++i)
#define pb push_back
#define pi pair<int,int>
#define f first
#define s second 
#define all(x) x.begin(), x.end()

//1 183 3473 20834 62500
int richest(int n, int T, int S) {
    if (T==1) {
        vector<int> f,s;
        forn(i,n) forn(j,i) {f.pb(j); s.pb(i);}
        auto z = ask(f,s);
        vector<pi> cnt(n);
        forn(i,n) cnt[i].s=i;
        for(auto&x:z) cnt[x].f++;
        sort(all(cnt));
        return cnt[n-1].s;
    }
    vector<int> a; forn(i,n) a.pb(i);
    for(int it=0; it<4; ++it) {
        vector<int> f,s;
        for(int i=0; i<a.size(); i+=2) {
            f.pb(a[i]);
            s.pb(a[i+1]);
        }
        auto z = ask(f,s);
        a = z;
    }
    vector<int> cnt(n);
    for(int it=0; it<1; ++it) {
        vector<int> f,s;
        int m=a.size(), k=3;
        for(int i=0; i+k<a.size(); i+=k) {
            for(int x=0; x<k; ++x) {
                for(int y=x+1; y<k; ++y) {
                    f.pb(a[i+x]);
                    s.pb(a[i+y]);
                }
            }
        }
        int k2=m%k;
        for(int i=m-(m%k); i<m; i+=k) {
            for(int x=0; x<k2; ++x) {
                for(int y=x+1; y<k2; ++y) {
                    f.pb(a[i+x]);
                    s.pb(a[i+y]);
                }
            }
        }
        auto z = ask(f,s);
        for(auto&x:z) cnt[x]++;
        vector<int> b;
        forn(i,n) if (cnt[i]==k-1) b.pb(i);
        forn(i,n) cnt[i]=0;
        for(int i=z.size()-k2*(k2-1)/2; i<z.size(); ++i) ++cnt[z[i]];
        forn(i,n) if (cnt[i]==k2-1) b.pb(i);
        forn(i,n) cnt[i]=0;
        a=b;
    }
    for(int it=0; it<1; ++it) {
        vector<int> f,s;
        int m=a.size(), k=6;
        for(int i=0; i+k<a.size(); i+=k) {
            for(int x=0; x<k; ++x) {
                for(int y=x+1; y<k; ++y) {
                    f.pb(a[i+x]);
                    s.pb(a[i+y]);
                }
            }
        }
        int k2=m%k;
        for(int i=m-(m%k); i<m; i+=k) {
            for(int x=0; x<k2; ++x) {
                for(int y=x+1; y<k2; ++y) {
                    f.pb(a[i+x]);
                    s.pb(a[i+y]);
                }
            }
        }
        auto z = ask(f,s);
        for(auto&x:z) cnt[x]++;
        vector<int> b;
        forn(i,n) if (cnt[i]==k-1) b.pb(i);
        forn(i,n) cnt[i]=0;
        for(int i=z.size()-k2*(k2-1)/2; i<z.size(); ++i) ++cnt[z[i]];
        forn(i,n) if (cnt[i]==k2-1) b.pb(i);
        forn(i,n) cnt[i]=0;
        a=b;
    }
    for(int it=0; it<1; ++it) {
        vector<int> f,s;
        int m=a.size(), k=19;
        for(int i=0; i+k<a.size(); i+=k) {
            for(int x=0; x<k; ++x) {
                for(int y=x+1; y<k; ++y) {
                    f.pb(a[i+x]);
                    s.pb(a[i+y]);
                }
            }
        }
        int k2=m%k;
        for(int i=m-(m%k); i<m; i+=k) {
            for(int x=0; x<k2; ++x) {
                for(int y=x+1; y<k2; ++y) {
                    f.pb(a[i+x]);
                    s.pb(a[i+y]);
                }
            }
        }
        auto z = ask(f,s);
        for(auto&x:z) cnt[x]++;
        vector<int> b;
        forn(i,n) if (cnt[i]==k-1) b.pb(i);
        forn(i,n) cnt[i]=0;
        for(int i=z.size()-k2*(k2-1)/2; i<z.size(); ++i) ++cnt[z[i]];
        forn(i,n) if (cnt[i]==k2-1) b.pb(i);
        forn(i,n) cnt[i]=0;
        a=b;
    }
    for(int it=0; it<1; ++it) {
        vector<int> f,s;
        int k=a.size();
        for(int i=0; i<a.size(); i+=k) {
            for(int x=0; x<k; ++x) {
                for(int y=x+1; y<k; ++y) {
                    f.pb(a[i+x]);
                    s.pb(a[i+y]);
                }
            }
        }
        auto z = ask(f,s);
        for(auto&x:z) cnt[x]++;
        vector<int> b;
        forn(i,n) if (cnt[i]==k-1) b.pb(i);
        a=b;
    }
    return a[0];
}

详细


Pretests

Pretest #1:

score: 15
Accepted
time: 615ms
memory: 23008kb

input:

1000 1 499500 957319859

output:

Correct
7127326332295218295
1.000000
1331569654267968081

result:

points 1.0 Correct

Pretest #2:

score: 0
Wrong Answer
time: 101ms
memory: 88396kb

input:

1000000 20 2000000 29091473

output:

Too many total elements in queries
1469670942222006797
0.000000
6906350380861515327

result:

points 0.0 Too many total elements in queries


Final Tests

Test #1:

score: 15
Accepted
time: 614ms
memory: 22216kb

input:

1000 1 499500 957319857

output:

Correct
7127326332295218295
1.000000
1331569654267968081

result:

points 1.0 Correct

Test #2:

score: 0
Wrong Answer
time: 104ms
memory: 89372kb

input:

1000000 20 2000000 29091471

output:

Too many total elements in queries
1469670942222006797
0.000000
6906350380861515327

result:

points 0.0 Too many total elements in queries