题目链接: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(); } }