QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#132593#5423. Perfect MatchingyzhangAC ✓696ms15800kbC++142.3kb2023-07-30 17:46:222023-07-30 17:46:23

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-30 17:46:23]
  • 评测
  • 测评结果:AC
  • 用时:696ms
  • 内存:15800kb
  • [2023-07-30 17:46:22]
  • 提交

answer

//μ's forever
#include <bits/stdc++.h>
#define N 200005
//#define getchar nc
using namespace std;
inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
    register int x=0,f=1;register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return x*f;
}
inline void write(register int x)
{
    if(!x)putchar('0');if(x<0)x=-x,putchar('-');
    static int sta[20];register int tot=0;
    while(x)sta[tot++]=x%10,x/=10;
    while(tot)putchar(sta[--tot]+48);
}
int T,n,a[N];
struct edge{
    int to,nxt,w;
}e[N<<1];
int head[N],cnt;
void add(int u,int v,int w){
    e[++cnt]=(edge){v,head[u],w},head[u]=cnt;
    e[++cnt]=(edge){u,head[v],w},head[v]=cnt;
}
map<int,int> mp1,mp2;
int cntn;
int visn[N],vis[N];
vector<pair<int,int> >ans;
bool fl;
void dfs(int x,int f){
    vis[x]=1;
    for(int i=head[x];i&&fl==0;i=e[i].nxt){
        int v=e[i].to;
        if(!vis[v]) dfs(v,x);
    }
    if(fl) return;
    vector<int> tmp;
    int val=0;
    for(int i=head[x];i;i=e[i].nxt){
        int v=e[i].to;
        if(!visn[e[i].w]&&v!=f) tmp.push_back(e[i].w);
        if(v==f) val=e[i].w;
    }
    if(tmp.size()%2==1){
        if(f==0){
            fl=1;
            return;
        }
        tmp.push_back(val);
    }
    for(int i=0;i<tmp.size();i+=2){
        visn[tmp[i]]=visn[tmp[i+1]]=1;
        ans.push_back(make_pair(tmp[i],tmp[i+1]));
    }
}
int main()
{
    T=read();
    while(T--){
        n=read();
        for(int i=1;i<=n*2;++i) head[i]=visn[i]=vis[i]=0;
        cnt=0;
        mp1.clear(),mp2.clear();
        cntn=0;
        fl=0;
        ans.clear();
        for(int i=1;i<=n;++i){
            a[i]=read();
            if(!mp1[i-a[i]]) mp1[i-a[i]]=++cntn;
            if(!mp2[i+a[i]]) mp2[i+a[i]]=++cntn;
            add(mp1[i-a[i]],mp2[i+a[i]],i);
        }
        for(int i=1;i<=cntn;++i)
            if(!vis[i])
                dfs(i,0);
        if(fl) puts("No");
        else{
            puts("Yes");
            for(int i=0;i<n/2;++i)
                printf("%d %d\n",ans[i].first,ans[i].second);
        }
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 5780kb

input:

3
6
14 22 33 11 25 36
4
100 10 98 12
4
1 3 5 7

output:

Yes
4 1
5 2
6 3
Yes
3 1
4 2
No

result:

ok 3 Cases (3 test cases)

Test #2:

score: 0
Accepted
time: 263ms
memory: 14004kb

input:

10
100000
0 -1 -2 -3 -4 -5 -2 -7 -8 -9 -10 -9 -12 13 14 15 -16 -17 -18 19 20 19 -22 -21 -20 -25 -26 -27 -28 -27 -26 31 30 29 -34 -35 -34 39 38 37 42 41 42 47 44 45 46 49 48 -53 -52 -51 -56 -55 -54 55 56 57 -58 -59 -60 61 62 63 64 65 64 67 66 69 70 73 72 73 74 73 76 75 74 79 80 81 -84 -83 -84 89 86 8...

output:

Yes
99977 99979
99821 99823
99980 99981
99929 99930
99994 99993
99940 99939
99928 99927
99894 99893
99892 99891
99873 99872
99985 99983
99937 99935
99925 99923
99814 99812
99796 99795
99772 99771
99727 99725
99724 99723
99706 99704
99700 99699
99673 99671
99640 99638
99628 99627
99586 99584
99550 99...

result:

ok 10 Cases (10 test cases)

Test #3:

score: 0
Accepted
time: 2ms
memory: 5764kb

input:

10
100
28761184 28761185 28761186 28761187 28761188 28761189 28761190 28761191 -20675012 -20675013 -20675014 -20675015 -20675016 -20675017 -20675018 -20675019 -20675020 -20675021 -20675022 -20675023 -20675024 -20675025 -20675026 -20675027 -20675028 -20675029 -20675030 -20675031 -36758138 -36758139 -...

output:

Yes
8 7
6 5
4 3
2 1
28 27
26 25
24 23
22 21
20 19
18 17
16 15
14 13
12 11
10 9
34 33
32 31
30 29
38 37
36 35
58 57
56 55
54 53
52 51
50 49
48 47
46 45
44 43
42 41
40 39
68 67
66 65
64 63
62 61
60 59
74 73
72 71
70 69
100 99
98 97
96 95
94 93
92 91
90 89
88 87
86 85
84 83
82 81
80 79
78 77
76 75
Yes
...

result:

ok 10 Cases (10 test cases)

Test #4:

score: 0
Accepted
time: 270ms
memory: 14980kb

input:

10
100000
-40608960 -40608959 -40608958 -40608957 -40608956 -40608955 -40608954 -40608953 -40608952 -40608951 -40608950 -40608949 -40608948 -40608947 -40608946 -40608945 -40608944 -40608943 -40608942 -40608941 -40608940 -40608939 -40608938 -40608937 -40608936 -40608935 -40608934 -40608933 -40608932 ...

output:

Yes
274 273
272 271
270 269
268 267
266 265
264 263
262 261
260 259
258 257
256 255
254 253
252 251
250 249
248 247
246 245
244 243
242 241
240 239
238 237
236 235
234 233
232 231
230 229
228 227
226 225
224 223
222 221
220 219
218 217
216 215
214 213
212 211
210 209
208 207
206 205
204 203
202 201
...

result:

ok 10 Cases (10 test cases)

Test #5:

score: 0
Accepted
time: 696ms
memory: 15800kb

input:

10
100000
0 -1 -2 3 2 5 6 7 -2 1 0 9 12 11 -8 13 8 -7 16 17 -10 19 22 21 22 23 4 -15 -18 -17 -6 -31 -14 25 32 -25 26 27 -32 31 38 -31 -32 -19 -30 -35 46 45 -48 -37 48 41 46 -43 -44 53 56 55 50 -27 52 61 62 -33 -18 19 64 45 46 -57 -8 -25 -26 -11 -22 49 -66 -65 -66 29 78 -15 74 83 12 83 14 85 86 -7 -5...

output:

Yes
89930 51424
90797 40204
84293 82260
81601 68474
63426 23563
81768 79940
89209 65068
78623 77535
71925 42616
50015 45416
63727 61582
94113 64578
71688 55765
87755 74925
86349 67712
97794 89613
98375 83954
85705 76781
96630 92136
62221 59568
77914 65037
64568 98085
91652 77633
93510 91261
75990 75...

result:

ok 10 Cases (10 test cases)

Test #6:

score: 0
Accepted
time: 151ms
memory: 7864kb

input:

1000
1000
-2 0 3 4 6 7 4 7 6 9 11 9 10 12 16 13 16 17 18 20 19 19 24 22 25 23 28 25 26 27 30 32 31 34 36 37 34 37 37 40 42 43 44 45 43 44 46 45 50 48 51 49 54 55 52 55 54 57 56 61 60 61 64 65 64 67 65 66 67 68 71 73 73 75 76 77 78 75 76 78 82 79 80 81 83 83 87 88 90 89 90 93 92 93 95 94 96 96 100 97...

output:

No
No
No
No
No
No
Yes
987 986
963 962
952 951
913 912
858 857
771 770
740 739
728 727
721 720
719 718
705 704
700 699
664 663
600 599
584 583
503 502
456 455
444 443
418 417
407 406
405 404
343 342
319 318
310 309
263 262
261 260
211 210
193 192
180 179
156 155
148 147
128 127
108 107
73 72
48 47
34...

result:

ok 1000 Cases (1000 test cases)