Codeforces Gym100502H:Clock Pictures(KMP算法)
2024-08-27 13:36:44
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 ;
}
最新文章
- JavaScript 自定义对象
- 借助GitHub托管你的项目代码
- Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
- oracle 建立视图,创建用户并授予查询权限
- JS获取Url参数的通用方法
- 【转载】正则表达式学习 &; ASCII码表
- javaScript入门--引用类型
- 无法关闭的QT程序(覆盖closeEvent,新建QProcess并脱离关系)
- Linux串口编程详解(转)
- HDU 5001 概率DP || 记忆化搜索
- Ubuntu 上查看硬件信息命令
- django rest-framework 4.REST的认证和权限
- 力扣(LeetCode)709. 转换成小写字母
- ipfs docker 运行试用
- 高可用的MongoDB集群-实战篇
- kafka消费者基本操作
- Hadoop详细配置教程
- Asp.net中文本框全选的实现
- mybatis 之 parameterType=";list";
- C#时间加减
热门文章
- Emgu-WPF学习使用-中值模糊
- 图片处理拓展篇 : 图片转字符画(ascii)
- android L 关机流程图
- Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法
- php 如何利用 soap调用.Net的WebService asmx文件
- UWP入门(八)--几个简单的控件
- Lucene Index Search
- 学在LINUX下编程(各种情况比较详细)
- 桌面程序阻止Windows关机(使用Message.Result取得DefWindowProc API函数的返回值,非常重要)
- redis python 操作 Python操作Redis数据库