http://codeforces.com/gym/100502/attachments

题意:有两个时钟上面有n个指针,给出的数字代表指针的角度。问能否在某一时刻使得两个时钟的指针重合。

思路:容易想到先对指针角度排序,然后相邻指针相减得到一个间距。如果这些间距能够相同的话,那么就代表可以在某个时刻重合。

最暴力地做法就是O(n^2)的复杂度。用第一个时钟的每一个间距去匹配第二个时钟的每一个间距,如果发现有能够匹配到的就说明可以。

明明都想到匹配了,但是我以为可以贪心地做,但是一直WA。比赛之后听到是KMP。瞬间爆炸。= =太弱了。

因为是环状的,所以要让第一个时钟的间距向后延伸n-1个。

然后让第一个时钟的间距当文本串,第二个时钟的间距当模式串,然后跑一下KMP就好了。

 #include <bits/stdc++.h>
using namespace std;
#define N 200010
const int maxdeg = ;
int nxt[N], a[N], b[N], c[N+N], d[N], n; void make_next() {
for(int i = ; i <= n; i++) nxt[i] = ;
int k = , j = ;
nxt[] = ;
while(j <= n) {
if(k == || d[k] == d[j]) {
k++; j++;
nxt[j] = k;
} else k = nxt[k];
}
} bool KMP() {
int k = , j = ;
make_next();
while(j < * n) {
if(k == || d[k] == c[j]) {
k++; j++;
if(k == n) return true;
} else k = nxt[k];
}
return false;
} int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
for(int i = ; i <= n; i++) scanf("%d", &b[i]);
sort(a + , a + + n);
sort(b + , b + + n);
for(int i = ; i <= n; i++) {
c[i] = a[i] - a[i-];
d[i] = b[i] - b[i-];
}
c[] = a[] - a[n] + maxdeg;
d[] = b[] - b[n] + maxdeg;
for(int i = n + ; i < * n; i++)
c[i] = c[i-n];
if(KMP()) puts("possible");
else puts("impossible");
return ;
}

最新文章

  1. JavaScript 自定义对象
  2. 借助GitHub托管你的项目代码
  3. Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
  4. oracle 建立视图,创建用户并授予查询权限
  5. JS获取Url参数的通用方法
  6. 【转载】正则表达式学习 &amp; ASCII码表
  7. javaScript入门--引用类型
  8. 无法关闭的QT程序(覆盖closeEvent,新建QProcess并脱离关系)
  9. Linux串口编程详解(转)
  10. HDU 5001 概率DP || 记忆化搜索
  11. Ubuntu 上查看硬件信息命令
  12. django rest-framework 4.REST的认证和权限
  13. 力扣(LeetCode)709. 转换成小写字母
  14. ipfs docker 运行试用
  15. 高可用的MongoDB集群-实战篇
  16. kafka消费者基本操作
  17. Hadoop详细配置教程
  18. Asp.net中文本框全选的实现
  19. mybatis 之 parameterType=&quot;list&quot;
  20. C#时间加减

热门文章

  1. Emgu-WPF学习使用-中值模糊
  2. 图片处理拓展篇 : 图片转字符画(ascii)
  3. android L 关机流程图
  4. Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法
  5. php 如何利用 soap调用.Net的WebService asmx文件
  6. UWP入门(八)--几个简单的控件
  7. Lucene Index Search
  8. 学在LINUX下编程(各种情况比较详细)
  9. 桌面程序阻止Windows关机(使用Message.Result取得DefWindowProc API函数的返回值,非常重要)
  10. redis python 操作 Python操作Redis数据库