Clock Pictures(kmp + Contest2075 - 湖南多校对抗赛(2015.04.26))
Problem H: Clock Pictures
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 73 Solved: 18
[Submit][Status][Web Board]
Description

Input

Output

Sample Input
6
1 2 3 4 5 6
7 6 5 4 3 1
Sample Output
impossible
HINT
题意:给你角度,问你通过旋转a图和b图能否重合;
思路:KMP;(比赛的时候,忘记是环了。。。还好队友给力!)
我的代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define mmax 200005
#define mod 360000
#define mem(a) memset(a,0,sizeof(a));
using namespace std;
int a[mmax],b[mmax],nnext[mmax];
int c[mmax*];
int t,n;
void getnext()
{
int i=,k=-;
nnext[]=-;
int len=n-;
while(i<len)
{
if(a[i]==a[k]||k==-)
{
i++;
k++;
nnext[i]=k;
}
else
k=nnext[k];
}
}
void kmp()
{
int i=,j=;
int lena=n-;
int lenc=*n-;
// int cnt=0;
while(i<lenc&&j<lena)
{
if(a[j]==c[i]||j==-)
{
i++;
j++;
}
else
j=nnext[j];
}
if(j!=lena)
t=;
//else
// printf("i=%d\tj=%d\n",i,j);
} int main()
{
int i;
while(scanf("%d",&n)!=EOF)
{
mem(a);
mem(b);
mem(c);
// mem(c);
for(i=;i<n;i++)
scanf("%d",&a[i]);
for(i=;i<n;i++)
scanf("%d",&b[i]);
sort(a,a+n);
sort(b,b+n);//printf("%d\t%d\n",a[i],b[i]);
c[n-]=(b[]-b[n-]+mod)%mod;
for(i=;i<n;i++)
{
a[i-]=(a[i]-a[i-]+mod)%mod;
b[i-]=(b[i]-b[i-]+mod)%mod;
c[i-]=c[i-+n]=b[i-];
} getnext();
t=;
kmp();
if(t)printf("impossible\n");
else printf("possible\n");
}
return ;
}
队友代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
#define ls 2*i
#define rs 2*i+1
#define up(i,x,y) for(i=x;i<=y;i++)
#define down(i,x,y) for(i=x;i>=y;i--)
#define mem(a,x) memset(a,x,sizeof(a))
#define w(a) while(a)
#define LL long long
const double pi = acos(-1.0);
#define Len 200005
#define mod 360000
const int INF = 0x3f3f3f3f;
#define exp 1e-6 int n,a[Len],b[Len],s[Len*],next1[Len]; void get_next()
{
next1[] = ;
int i;
up(i,,n-)
{
int t = i-;
t = next1[t];
w(t!= && a[t+]!=a[i]) t = next1[t];
t++;
if(a[t]==a[i]) next1[i] = t;
else next1[i] = ;
}
} int main()
{
int i,j,k;
w(~scanf("%d",&n))
{
up(i,,n-)
scanf("%d",&a[i]);
up(i,,n-)
scanf("%d",&b[i]);
sort(a,a+n);
sort(b,b+n);
down(i,n-,)
a[i]=(a[i]-a[i-]+mod)%mod;
up(i,,n-)
s[i]=s[i+n]=b[i];
down(i,*n-,)
s[i]=(s[i]-s[i-]+mod)%mod;
int flag = ;
int pos = ;
get_next(); up(i,,*n-)
{
if(s[i]!=a[pos])
{
int tem = next1[pos-];
w(tem && s[i]!=a[tem+])
tem = next1[tem];
tem++;
if(a[tem]==s[i]) pos = tem+;
else pos = ;
}
else pos++;
if(pos == n)
{
flag = ;
break;
}
}
printf("%d\t%d\n",i,n);
printf("%s\n",flag?"possible":"impossible");
} return ;
} /**************************************************************
Problem: 1581
User: aking2015
Language: C++
Result: Accepted
Time:276 ms
Memory:5396 kb
****************************************************************/
Clock Pictures(kmp + Contest2075 - 湖南多校对抗赛(2015.04.26))的更多相关文章
- Contest2073 - 湖南多校对抗赛(2015.04.06)
Contest2073 - 湖南多校对抗赛(2015.04.06) Problem A: (More) Multiplication Time Limit: 1 Sec Memory Limit: ...
- Contest2071 - 湖南多校对抗赛(2015.03.28)
Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.csu.edu.cn/OnlineJudge/contest.php?c ...
- 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point
给四个数 问能不能算出24点...我的方法比较烂...920ms 差点TLE.应该有更好的方法. #include<stdio.h> #include<string.h> #i ...
- 湖南多校对抗赛(2015.05.03)Problem B: War
并查集.从后往前加边. #include<stdio.h> #include<string.h> #include<math.h> #include<algo ...
- Contest2089 - 湖南多校对抗赛(2015.05.31) Swipe(csu1648)
Problem E: Swipe Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 100 Solved: 15[Submit][Status][Web ...
- Aquarium Tank(csu1634+几何+二分)Contest2087 - 湖南多校对抗赛(2015.05.24)-G
Aquarium Tank Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 15 Solved: 4[Submit][Status][Web Board ...
- Heaps(Contest2080 - 湖南多校对抗赛(2015.05.10)(国防科大学校赛决赛-Semilive)+scu1616)
Problem H: Heaps Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 48 Solved: 9[Submit][Status][Web Bo ...
- Contest2075 - 湖南多校对抗(csu1576)大数 Catalan Square
Problem C: Catalan Square Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 42 Solved: 16[Submit][Stat ...
- CSU 2136 ——湖南多校对抗赛 I
2136: 统帅三军! Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 55 ...
随机推荐
- _ZNote_Mac_技巧_QuickLook功能扩展
QuicLook(快速查看)是macOS一项非常方便的独有功能: 当选中一个文件,只需要按下空格键即可查看其内容,在按下空格退出QuickLook, 不需要启动再关闭任何软件. 默认支持大部分视频.音 ...
- noip第15课资料
- Alpha冲刺 - (6/10)
Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 - 过去两天完成了哪些任务 1. 基于ssm框架的前后端交互 ...
- Windows核心编程:第10章 同步设备IO与异步设备IO
Github https://github.com/gongluck/Windows-Core-Program.git //第10章 同步设备IO与异步设备IO.cpp: 定义应用程序的入口点. // ...
- Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
为了确保数据传输的安全,现在越来越多的应用使用Https的方式来进行数据传输,使用https有很多有点,比如: HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,要比ht ...
- iOS调用QQ发起临时会话
iOS调用QQ发起临时会话 iOS调用qq前先判断是否安装qq, 之后通过OpenURL打开对用的qq NSURL *url = [NSURL URLWithString:@"mqq://& ...
- cad2008 参照面板 在位编辑后无法使用
有时候在位编辑之后,保存在位编辑了,可是参照面板无法动了,这个时候只要保存一下,然后ctrl+z,就可以解决了..蛮神奇的,我还没想到如何用代码去搞定它..
- c# 遍历所有安装程序 获取所有已经安装的程序
/// <summary> /// 获取所有已经安装的程序 /// </summary> /// <param name="reg"></ ...
- Behavior Tree 用 Lua 实现一个最简行为树
local function Traverse(node, ...) local t = node.type if t == SELECTOR then , #node do if Traverse( ...
- Unicode 字符串排序规则(二):如何比较字符串
一.UCA 简介 Unicode Collation Algorithm (UCA) 是 Unicode 规定的如何比较两个字符串大小的算法,也是事实上的标准.我们先来看下它的几个特征. 1.1 Mu ...