zoukankan      html  css  js  c++  java
  • Codeforces Round #639 (Div. 2).C. Hilbert's Hotel

    Codeforces Round #639 (Div. 2)

    题目大意

    有一个数组,对于任何数字k在数轴上的位置对n取模后都会映射与这个数组的某一个位置index,对于每一个位置都会有一个移动操作,问当k-》无限的时候,是否依然是每个位置都有且仅有一个数。

    做法分析

    这个题我的思路是把数轴想象成给定的这个数组无限相邻的一个轴。那么对于任意一个数组段的某个位置上出现了2个访客或是0个访客显然都是不成立的。为了表述这个无穷的概念。

    可以把所有位置的下标均%n。这样就把整个数轴的情况映射到了单一的区间。也只需要对单一区间操作即可。详细的注释在代码里面有体现。

    代码

    #include<bits/stdc++.h>
    using namespace std ;
    long long a[200005];
    long long b[200005];
    int main(){
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            for(int i=0;i<n;i++){
                cin>>a[i];          //输入数组 
                b[i]=0;          //初始化 
            }
            for(int i=0;i<n;i++){
                int temp=(i+a[i])%n;        //找到映射于i的数字将要移动到的位置并对其取模映射到单一区间。 
                if(temp<0)temp+=n;
                b[temp]++;           //记录这个映射位置被到达过的数量。 
            }
            int flag=0;
            for(int i=0;i<n;i++){
                if(b[i]==0||b[i]>1){     //到达过两次以上或是没到达过就说明不符合要求。 
                    cout<<"NO"<<endl;
                    flag=1;
                    break;
                }
            }
            if(!flag)cout<<"YES"<<endl;
        }
    }
    rush!
  • 相关阅读:
    mybatis-generator.xml
    模板下载
    任务导出
    订单导出
    创建指定日期任务
    字符串的知识
    数组元素反转
    JVM 中知识
    Redis介绍
    JsonP
  • 原文地址:https://www.cnblogs.com/LH2000/p/12841040.html
Copyright © 2011-2022 走看看