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");
        }
    }
    数组嵌套法
  • 相关阅读:
    股票行情
    证券总结
    求职
    Android的Touch事件处理机制
    订货量、成交量、价订货量、成交量、价格与行情之间的关系
    Android下如何理解onMeasure,onLayout的过程
    并发和并行的区别
    网页布局
    计算机发展史--图灵
    计算机发展史
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8467553.html
Copyright © 2011-2022 走看看