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))的更多相关文章

  1. Contest2073 - 湖南多校对抗赛(2015.04.06)

    Contest2073 - 湖南多校对抗赛(2015.04.06) Problem A: (More) Multiplication Time Limit: 1 Sec  Memory Limit:  ...

  2. Contest2071 - 湖南多校对抗赛(2015.03.28)

    Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.csu.edu.cn/OnlineJudge/contest.php?c ...

  3. 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point

    给四个数 问能不能算出24点...我的方法比较烂...920ms 差点TLE.应该有更好的方法. #include<stdio.h> #include<string.h> #i ...

  4. 湖南多校对抗赛(2015.05.03)Problem B: War

    并查集.从后往前加边. #include<stdio.h> #include<string.h> #include<math.h> #include<algo ...

  5. Contest2089 - 湖南多校对抗赛(2015.05.31) Swipe(csu1648)

    Problem E: Swipe Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 100  Solved: 15[Submit][Status][Web ...

  6. 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 ...

  7. 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 ...

  8. Contest2075 - 湖南多校对抗(csu1576)大数 Catalan Square

    Problem C: Catalan Square Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 42  Solved: 16[Submit][Stat ...

  9. CSU 2136 ——湖南多校对抗赛 I

    2136: 统帅三军! Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 55     ...

随机推荐

  1. 06-jQuery的文档操作

    之前js中咱们学习了js的DOM操作,也就是所谓的增删改查DOM操作.通过js的DOM的操作,大家也能发现,大量的繁琐代码实现我们想要的效果.那么jQuery的文档操作的API提供了便利的方法供我们操 ...

  2. 使用CefSharp在.Net程序中嵌入Chrome浏览器(一)——简介

    有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡 ...

  3. uniGUI中Cookies使用中文汉字的方法(使用EncodeString函数编码)

    uniGUI中Cookies使用中文汉字的方法(使用EncodeString函数编码)   在目前的UniGUI(ver:0.88)中使用UniApplication.Cookies.SetCooki ...

  4. 【手记】解决VS发布asp.net项目报错“该项目中不存在目标GatherAllFilesToPublish”及后续问题

    办法在最后. 用VS2017打开一个以前用VS2010写的asp.net项目后,设置好发布选项(发布到文件夹),发布的时候报错如图: 搜索一番,找到的办法是: 在项目文件(xxx.csproj)中,在 ...

  5. 背水一战 Windows 10 (72) - 控件(控件基类): UIElement - UIElement 的位置, UIElement 的布局, UIElement 的其他特性

    [源码下载] 背水一战 Windows 10 (72) - 控件(控件基类): UIElement - UIElement 的位置, UIElement 的布局, UIElement 的其他特性 作者 ...

  6. 使用netstat命令查看端口的使用情况

    Windows如何查看端口占用情况操作步骤如下: 开始--运行--cmd 进入命令提示符,输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管 ...

  7. electron 使用 node-ffi 调用 C++ 动态链接库(DLL)

    一.为什么需要使用DLL 需要使用系统 API 操作或扩展应用程序: 需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的: 需 ...

  8. MyEclipse + Maven开发Web工程的详细配置过程

    好久没做Web方面的开发,今天突然想弄弄SpringMVC,因为不久前又学了点Maven觉得非常好,所以在弄SpringMVC这个Web框架时想使用Maven来做,但是问题又来了,我一直是在Eclip ...

  9. Python环境搭建详解(Window平台)

    前言 Python,是一种面向对象的解释型计算机程序设计语言,是纯粹的自由软件,Python语法简洁清晰,特色是强制用空白符作为语句缩进,具有丰富和强大的库,它常被称为胶水语言. Python是一种解 ...

  10. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架

    前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...