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");
        }
    }
    数组嵌套法
  • 相关阅读:
    SQL WHERE 子句:语法及案例剖析
    SQL SELECT DISTINCT 语句:语法及案例剖析
    SQL SELECT 语句:语法与案例剖析
    SQL 语法:一些最重要的 SQL 命令简介
    SQL 简介:什么是SQL,SQL能做什么
    mybatis 注解开发
    mybatis 缓存
    mybatis 延迟加载策略
    mybatis的多表查询
    mybatis 的动态 SQL 语句
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8467553.html
Copyright © 2011-2022 走看看