zoukankan      html  css  js  c++  java
  • Codeforces Round #464 (Div. 2) A. Love Triangle[判断是否存在三角恋]

    A. Love Triangle
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    As you could know there are no male planes nor female planes. However, each plane on Earth likes some other plane. There are n planes on Earth, numbered from 1 to n, and the plane with number i likes the plane with number fi, where 1 ≤ fi ≤ n and fi ≠ i.

    We call a love triangle a situation in which plane A likes plane B, plane B likes plane C and plane C likes plane A. Find out if there is any love triangle on Earth.

    Input

    The first line contains a single integer n (2 ≤ n ≤ 5000) — the number of planes.

    The second line contains n integers f1, f2, ..., fn (1 ≤ fi ≤ n, fi ≠ i), meaning that the i-th plane likes the fi-th.

    Output

    Output «YES» if there is a love triangle consisting of planes on Earth. Otherwise, output «NO».

    You can output any letter in lower case or in upper case.

    Examples
    Input
    Copy
    5
    2 4 5 1 3
    Output
    YES
    Input
    Copy
    5
    5 5 5 5 1
    Output
    NO
    Note

    In first example plane 2 likes plane 4, plane 4 likes plane 1, plane 1 likes plane 2 and that is a love triangle.

    In second example there are no love triangles.

     [题意]:判断是否存在A喜欢B,B喜欢C,C喜欢A.(即三角恋)

    [分析]:a[a[a[i]]]==i可以判断存在三角恋

    [代码]:

    #include<bits/stdc++.h>
    
    using namespace std;
    const int maxn = 5000+10;
    
    int main()
    {
        int n,a[maxn],ans,j,k;
        while(cin>>n)
        {
            ans=0;
            for(int i=1;i<=n;i++)
            {
                cin>>a[i];
            }
    
            for(int i=1;i<=n;i++)
            {
                j=a[i];
                k=a[j];
                if(a[k]==i && i!=j && j!=k && i!=k) ans++;
            }
            printf("%s
    ",ans?"YES":"NO");
        }
    }
    交换变量法
    #include<bits/stdc++.h>
    
    using namespace std;
    const int maxn = 5000+10;
    
    int main()
    {
        int n,a[maxn],f,ans;
        while(cin>>n)
        {
            for(int i=1;i<=n;i++)
                cin>>a[i];
            f=0;
            for(int i=1;i<=n;i++)
            {
                if(a[a[a[i]]]==i) f=1;
            }
            printf("%s
    ",f?"YES":"NO");
        }
    }
    数组嵌套法
  • 相关阅读:
    Spring4+SpringMVC+MyBatis登录注册详细
    Spring MVC登录注册以及转换json数据
    MyBatis+mysql查询和添加数据
    html5中的选择器
    倒影(转)
    bi包
    函数作用域
    节点开始
    window.onload中失效的问题
    Node.js简介
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8467553.html
Copyright © 2011-2022 走看看