Codeforces Round #394 (Div. 2) - B

 

题目链接:http://codeforces.com/contest/761/problem/B

题意:给定一个环形跑道。里面有n个障碍,跑道长度为L。然后有两个人在两个起点(起点可能相同),每个人都按逆时针走。现在给出这两个人遇到这n个障碍时走的步数。问是否存在合法的障碍分布。
思路:我们假设第一个人的起点为原点。那么对于第一个人来说n个障碍的位置就是对于他的输入序列。然后枚举第二个人的起点。根据第二个人的序列来判断是否和第一个人的位置一样。一样则说明存在合法分布。 注意由于跑道是环形所以要进行取模。

import java.io.PrintWriter;
import java.util.*;

public class Main {
    public static final int MAXN=100+5;
    public static int v[]=new int [MAXN];
    public static int pa[]=new int [MAXN];
    public static int pb[]=new int [MAXN];
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int n=cin.nextInt(),L=cin.nextInt();
        boolean flag=false; 
        Arrays.fill(v, 0);
        for(int i=0;i<n;i++){
            pa[i]=cin.nextInt();
            v[pa[i]]=1;
        }
        for(int i=0;i<n;i++){
            pb[i]=cin.nextInt();
        }
        for(int i=0;i<L;i++){
            Set<Integer>se=new HashSet<Integer>();
            for(int j=0;j<n;j++){
                if(v[(i+pb[j])%L]==1){
                    se.add((i+pb[j])%L);
                }else{
                    break;
                }
            }
            if(se.size()==n){
                flag=true; break;
            }
        }
        out.printf(flag?"YES":"NO");
        cin.close();
        out.flush();
    }
}

 

posted @ 2017-02-20 16:48  キリト  阅读(108)  评论(0编辑  收藏  举报