打卡信奥刷题(2061)用C++构建信奥 P11385 [POI 2024/2025 R1] Walki robotów

P11385 [POI 2024/2025 R1] Walki robotów

题目背景

原题译自 POI 2024/2025 R1 Walki robotów

题目描述

在 Bajtocji 正在进行一场大型年度机器人锦标赛,其中有 n n n 个机器人参赛,它们的编号从 1 1 1 n n n。第 i i i 个机器人由两个参数描述, s i s_{i} si z i   ( 1 ≤ s i , z i ≤ n ) z_{i}\ (1 \leq s_{i}, z_{i} \leq n) zi(1si,zin),分别表示机器人的力量和敏捷度。力量值 s i s_{i} si 各不相同。敏捷度值 z i z_{i} zi 也各不相同。

锦标赛由一系列单挑比赛组成。在每场比赛中,两个尚未被淘汰的机器人进行对决。在第 i i i 个机器人对战第 j j j 个机器人的比赛中,如果 s i > s j s_{i}>s_{j} si>sj z i > z j z_{i}>z_{j} zi>zj,那么第 i i i 个机器人将淘汰第 j j j 个机器人。相应地,如果 s i < s j s_{i}<s_{j} si<sj z i < z j z_{i}<z_{j} zi<zj,那么第 j j j 个机器人将淘汰第 i i i 个机器人。请注意,这意味着在同一场比赛中可能会有两个机器人都被淘汰。如果某个机器人没有在比赛中被淘汰,它可以继续参与后续比赛。

只有当最终所有机器人都被淘汰时,锦标赛的直播收视率才能最高。你的任务是检查是否可以安排一系列比赛,使得最终所有机器人都被淘汰。

输入格式

输入的第一行包含一个整数 n   ( 1 ≤ n ≤ 2 ⋅ 1 0 5 ) n\ (1 \leq n \leq 2\cdot 10^5) n(1n2105)。接下来的 n n n 行描述了机器人的信息。第 i i i 个机器人的描述包含两个整数 s i s_{i} si z i   ( 1 ≤ s i , z i ≤ n ) z_{i}\ (1 \leq s_{i}, z_{i} \leq n) zi(1si,zin)。保证 s 1 , s 2 , … , s n s_{1}, s_{2}, \ldots, s_{n} s1,s2,,sn 互不相同。保证 z 1 , z 2 , … , z n z_{1}, z_{2}, \ldots, z_{n} z1,z2,,zn 互不相同。即 s , z s,z s,z 都是 1 ∼ n 1 \sim n 1n 的两个排列。

输出格式

如果可以安排一系列比赛,使得最终所有机器人都被淘汰,则输出 TAK。否则,输出 NIE

输入输出样例 #1

输入 #1

4
1 4
2 2
3 3
4 1

输出 #1

TAK

输入输出样例 #2

输入 #2

2
1 1
2 2

输出 #2

NIE

输入输出样例 #3

输入 #3

见下发 wal1ocen.in

输出 #3

见下发 wal1ocen.out

输入输出样例 #4

输入 #4

见下发 wal2ocen.in

输出 #4

见下发 wal2ocen.out

输入输出样例 #5

输入 #5

见下发 wal3ocen.in

输出 #5

见下发 wal3ocen.out

输入输出样例 #6

输入 #6

见下发 wal4ocen.in

输出 #6

见下发 wal4ocen.out

输入输出样例 #7

输入 #7

见下发 wal5ocen.in

输出 #7

见下发 wal5ocen.out

说明/提示

对于样例一,如果在第一场比赛中第一个和第二个机器人对决,第二场比赛中第三个和第四个机器人对决,那么所有机器人都将被淘汰。

对于样例三,该样例满足 n = 8 , s i = i , z i = n − i + 1 n=8, s_{i}=i, z_{i}=n-i+1 n=8,si=i,zi=ni+1

对于样例四,该样例满足 n = 20 n=20 n=20,存在一个机器人可以击败所有其他机器人,并且没有机器人可以击败它。

对于样例五,该样例满足 n = 500 n=500 n=500,可以将所有机器人配对,使每对机器人互相淘汰。

对于样例六,该样例满足 n = 200000 , s i = i n=200000, s_{i}=i n=200000,si=i z i = i z_{i}=i zi=i 1 ≤ i ≤ n 2 1 \leq i \leq \frac{n}{2} 1i2n,并且 s i = i s_{i}=i si=i z i = 3 n 2 − i + 1 z_{i}=\frac{3n}{2}-i+1 zi=23ni+1 n 2 < i ≤ n \frac{n}{2}<i \leq n 2n<in

对于样例七,该样例满足 n = 5 n=5 n=5

子任务编号特殊性质分值
1 1 1 n ≤ 8 n \leq 8 n8 10 10 10
2 2 2 n ≤ 20 n \leq 20 n20 10 10 10
3 3 3 n ≤ 1000 n \leq 1000 n1000 30 30 30
4 4 4无特殊性质 50 50 50

C++实现

#include<bits/stdc++.h>
  #define ll long long
  using namespace std;
  const int N=2e5+1;
  int n;
  struct node{
  int a,b;
  }p[N];
  int lst=1;
  int cnt,maxa,maxb;
  bool cmp(node x,node y){
  return x.a>y.a;
  }
  int main(){
  scanf("%d",&n);
  for(int i=1;i<=n;i++){
  scanf("%d%d",&p[i].a,&p[i].b);
  }
  sort(p+1,p+n+1,cmp);
  for(int i=2;i<=n;i++){
  if(p[lst].b>p[i].b){
  ++cnt;
  maxa=max(maxa,p[i].a);
  maxb=max(maxb,p[i].b);
  }
  else lst=i;
  }
  if((n-cnt)%2==0) puts("TAK");
  else if(maxa==cnt&&maxb==cnt) puts("NIE");
  else puts("TAK");
  return 0;
  }

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

posted @ 2025-09-19 10:25  wzzkaifa  阅读(12)  评论(0)    收藏  举报