听灌佬多
  • 板块灌水区
  • 楼主AAAuc03
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/21 19:11
  • 上次更新2024/10/21 20:27:17
查看原帖
听灌佬多
923362
AAAuc03楼主2024/10/21 19:11

[语言月赛 202410] 同桌

题目描述

一个班级内有 2n2n 个小朋友,编号依次为 1,2,,2n1,2,\ldots, 2n。教室里有 nn 张桌子,每张桌子可以坐两个人。坐在同一张桌子旁边的小朋友互为同桌。一个小朋友的同桌不能是自己。

老师问每个小朋友想和谁做同桌,ii 号小朋友的回答是想和 pip_i 号小朋友做同桌。

请你帮老师判断一下,老师能否让每个小朋友都满意?

输入格式

输入的第一行有一个正整数 nn,表示桌子的张数。

第二行有 2n2n 个数 p1,p2,,p2np_1,p_2,\ldots,p_{2n},表示每个小朋友想和谁做同桌。

输出格式

如果老师可以让所有小朋友都满意,则输出 Yes,否则输出 No

样例 #1

样例输入 #1

3
2 1 6 5 4 3

样例输出 #1

Yes

样例 #2

样例输入 #2

2
1 2 4 3

样例输出 #2

No

样例 #3

样例输入 #3

2
2 3 4 1

样例输出 #3

No

提示

【样例 1 解释】

老师可以让 1,21,2 号小朋友坐在一张桌子旁,3,63,6 号小朋友坐在第二张桌子旁,4,54,5 坐在第三张桌子旁。

【样例 2 解释】

11 号小朋友的同桌肯定不会是自己(因为每张桌子一定恰好坐 22 个小朋友)。

【样例 3 解释】

11 号小朋友想和 22 号小朋友做同桌,然而 22 号小朋友却希望和 33 号小朋友做同桌,所以不可能 1,21,2 号小朋友同时满意。

如果你进一步思考会发现,老师最多同时让 22 个小朋友满意。

【数据范围】

本题采用捆绑测试,一个子任务内有多个测试点,同时答对子任务内所有测试点才能拿到对应分数

  • 子任务 1(99 分):n=1n=1
  • 子任务 2(1212 分):n=2n=2
  • 子任务 3(2828 分):保证 piip_i\ne i
  • 子任务 4(5151 分):无特殊限制。

对于全体数据,保证 1n50001\le n\le 50001pi2n1\le p_i\le 2n

#include <bits/stdc++.h>
using namespace std;
int n,p[10086],m;
int main()
{
    cin>>n;
    m=2*n;
    for(int i=1;i<=m;i++)
    {
        cin>>p[i];
    }
    for(int i=1;i<=m;i++)
    {
        if(p[i]!=p[p[i]])
        {
            cout<<"No";
            exit(0);
        }
        if(p[i]==i)
        {
            cout<<"No";
            exit(0);
        }
    }
    cout<<"Yes";
    return 0;
}

B4045 [语言月赛 202410] 同桌

2024/10/21 19:11
加载中...