QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#474637#6399. Classic: Classical ProblemUESTC_Snow_HalationWA 0ms7844kbC++142.2kb2024-07-12 21:20:032024-07-12 21:20:04

Judging History

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

  • [2024-07-12 21:20:04]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:7844kb
  • [2024-07-12 21:20:03]
  • 提交

answer

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define FOR() ll le=e[u].size();for(ll i=0;i<le;i++)
#define QWQ cout<<"QwQ\n";
#define ll long long
#include <vector>
#include <queue>
#include <map>

typedef long double db;
using namespace std;
const ll N=501010;
const ll qwq=303030;
const ll inf=0x3f3f3f3f3f;
const db eps = 1e-8;

inline ll read() {
    ll sum = 0, ff = 1; char c = getchar();
    while(c<'0' || c>'9') { if(c=='-') ff = -1; c = getchar(); }
    while(c>='0'&&c<='9') { sum = sum * 10 + c - '0'; c = getchar(); }
    return sum * ff;
}

ll T;
ll n,p;
ll vis[N];
ll a[N],d[N],num;
ll ans;
ll st[N],cnt;
ll ni[N] = {0,1};

void chushihua() {
    cnt = num = ans = 0;
    for(ll i=0;i<=p;i++) vis[i] = 0;
}

int main() {
    T = read();
    while(T--) {
        chushihua();
        n = read(); p = read();
        for(ll i=2;i<p;i++) ni[i] = p - (p/i) * ni[p%i] %p;
        for(ll i=1;i<=n;i++) vis[read()] = 1;

        if(!vis[0]) { cout<<"1 1\n0\n"; continue; }
        if(n==p) {
            cout<<p-1<<" "<<p<<"\n";
            for(ll i=1;i<p;i++) cout<<i<<" \n"[i==p-1];
            continue;
        }

        ll sq = sqrt(p);

        if(p-n<=sq) {
            for(ll i=1;i<p;i++) if(!vis[i]) d[++num] = i;
            for(ll c=1;c<p;c++) {
                ll mi = inf;
                for(ll i=1;i<=num;i++) mi = min(mi,d[i]*c%p);
                if(mi>ans) {
                    ans = mi;
                    st[cnt=1] = c;
                }
                else if(mi==ans) {
                    st[++cnt] = c;
                }
            }
        }

        else {
            for(ll c=1;c<p;c++) {
                ll res = 0;
                for(ll i=1;i<p;i++) {
                    if(!vis[i*ni[c]%p]) { res = i; break; }
                }
                if(res>ans) {
                    ans = res;
                    st[cnt=1] = c;
                }
                else if(res==ans) {
                    st[++cnt] = c;
                }
            }
        }

        cout<<cnt<<" "<<ans<<"\n";
        for(ll i=1;i<=cnt;i++) cout<<st[i]<<" \n"[i==cnt];
    }
    return 0;
}
/*

5


*/

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 7652kb

input:

3
2 3
0 2
3 5
2 3 4
3 5
0 2 3

output:

1 2
2
1 1
0
2 2
2 3

result:

ok 6 lines

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 7844kb

input:

3
1 2
0
1 2
1
2 2
1 0

output:

1 1
1
1 1
0
1 2
1

result:

wrong answer 1st lines differ - expected: '2 1', found: '1 1'