QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#674544#9484. Colored Complete GraphThe_clear_poolWA 0ms3808kbC++142.5kb2024-10-25 16:25:172024-10-25 16:25:17

Judging History

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

  • [2024-10-25 16:25:17]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3808kb
  • [2024-10-25 16:25:17]
  • 提交

answer

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define N 100100
int n;
int vis[N];//1为red,2为blue
int cnt[3];
inline int op(int x){
    if(x==1) return 2;
    return 1;
}
#define pii pair<int,int> 
#define mp make_pair
pii ans[N][3];
int main(){
    scanf("%d",&n);
    for(int i=2;i<=n;i++){
        char ch;
        printf("? %d %d\n",1,i);//n-1次询问
        fflush(stdout);
        ch=getchar();
        while(ch!='R'&&ch!='B') ch=getchar();
        if(ch=='R'){
            vis[i]=1;
            cnt[1]++;
            ans[cnt[1]][1]=mp(1,i);
        }
        else{
            vis[i]=2;
            cnt[2]++;
            ans[cnt[2]][2]=mp(1,i);
        }
    }
    return 0;
    if(cnt[1]==n-1||cnt[2]==n-1){
        printf("!\n");
        for(int i=2;i<=n;i++){
            printf("%d %d\n",1,i);
        }
    }
    else{
        int tmp=0;
        if(cnt[1]>cnt[2]){
            tmp=1;
        }
        else{
            tmp=2;
        }
        for(int i=2;i<=n;i++){
            if(vis[i]==tmp){
                for(int j=2;j<=n;j++){
                    if(j!=i&&vis[j]!=tmp){
                        char ch;
                        int color;
                        printf("? %d %d\n",j,i);//(n-2)次询问  
                        fflush(stdout);
                        ch=getchar();
                        while(ch!='B'&&ch!='R') ch=getchar();
                        if(ch=='R') color=1;
                        else color=2;
                        if(color==op(tmp)){
                            cnt[op(tmp)]++;
                            ans[cnt[op(tmp)]][op(tmp)]=mp(i,j);
                            break;
                        }
                        else{
                            cnt[tmp]++;
                            vis[j]=tmp;
                            ans[cnt[tmp]][tmp]=mp(i,j);
                            if(cnt[tmp]==n-1){
                                printf("!\n");
                                for(int k=1;k<=n-1;k++){
                                    printf("%d %d\n",ans[k][tmp].first,ans[k][tmp].second);
                                }
                                return 0;
                            }
                        }
                    }
                }
            }
        }
        printf("!\n");
        for(int i=1;i<=n-1;i++){
            printf("%d %d\n",ans[i][op(tmp)].first,ans[i][op(tmp)].second);
        }
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3808kb

input:

3
B
R

output:

? 1 2
? 1 3

result:

wrong answer invalid question