CodeForces 761B Dasha and friends

来源:互联网 发布:智能电视点播软件 编辑:程序博客网 时间:2024/05/17 05:04

题目链接:http://codeforces.com/contest/761/problem/B
题意:给一个圆环,告诉你两个序列a,b,a[i],b[i]分别表示在圆环上的位置,现问你,能否通过移动整体一个数组使得他的两个序列相等
解析:这和Gym - 100502H Clock Pictures这道题很像,不过由于这题的数据规模很小,所以我是直接枚举差值,模拟移动的,如果数据规模大的话,可以存差值,采用kmp匹配的方式

#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <queue>#include <map>using namespace std;const int maxn = 1e6+100;const int inf = 0x7fffffff;int a[maxn];int b[maxn];int main(void){    int n,l;    scanf("%d %d",&n,&l);    for(int i=0;i<n;i++)        scanf("%d",&a[i]);    for(int i=0;i<n;i++)        scanf("%d",&b[i]);    int flag = 0;    for(int i=0;i<n;i++)    {        int cnt = a[0]-b[i];        int judge = 1;        for(int j=0;j<n;j++)        {            if((b[(j+i)%n]+cnt+l)%l!=a[j])            {                judge = 0;                break;            }        }        if(judge)        {            flag = 1;            puts("YES");            break;        }    }    if(!flag)        puts("NO");    return 0;}
0 0
原创粉丝点击