Codeforces Round #394 (Div. 2) B. Dasha and friends —— 暴力 or 最小表示法
题目链接:http://codeforces.com/contest/761/problem/B
2 seconds
256 megabytes
standard input
standard output
Running with barriers on the circle track is very popular in the country where Dasha lives, so no wonder that on her way to classes she saw the following situation:
The track is the circle with length L, in distinct points of which there are n barriers.
Athlete always run the track in counterclockwise direction if you look on him from above. All barriers are located at integer distance from each other along the track.
Her friends the parrot Kefa and the leopard Sasha participated in competitions and each of them ran one lap. Each of the friends started from some integral point on the track. Both friends wrote the distance from their start along the track to each of the n barriers.
Thus, each of them wrote n integers in the ascending order, each of them was between 0 and L - 1,
inclusively.
Consider
an example. Let L = 8, blue points are barriers, and green points are Kefa's start (A) and Sasha's start (B). Then Kefa writes down
the sequence[2, 4, 6], and Sasha writes down [1, 5, 7].
There are several tracks in the country, all of them have same length and same number of barriers, but the positions of the barriers can differ among different tracks. Now Dasha is interested if it is possible that Kefa and Sasha ran the same track or they
participated on different tracks.
Write the program which will check that Kefa's and Sasha's tracks coincide (it means that one can be obtained from the other by changing the start position). Note that they always run the track in one direction — counterclockwise, if you look on a track from
above.
The first line contains two integers n and L (1 ≤ n ≤ 50, n ≤ L ≤ 100)
— the number of barriers on a track and its length.
The second line contains n distinct integers in the ascending order — the distance from Kefa's start to each barrier in the order of
its appearance. All integers are in the range from 0 to L - 1 inclusively.
The second line contains n distinct integers in the ascending order — the distance from Sasha's start to each barrier in the order
of its overcoming. All integers are in the range from 0 to L - 1 inclusively.
Print "YES" (without quotes), if Kefa and Sasha ran the coinciding tracks (it means that the position of all barriers coincides, if they start running from
the same points on the track). Otherwise print "NO" (without quotes).
3 8
2 4 6
1 5 7
YES
4 9
2 3 5 8
0 1 3 6
YES
2 4
1 3
1 2
NO
The first test is analyzed in the statement.
题解:
n的范围为:1~50, 所以即使O(n^3)的复杂度仍绰绰有余。
两个环相等的充要条件:这两个环上的每相邻两点间隔对应相等(大小及次序)。
有关下标循环的小细节:
1.当下标的范围为:0~n-1, 则 i = (i+step)%n;
2.当下标的范围为:1~n, 则 i = (i+step<=n)? (i+step) : (i+step)%n。当step=1时, 可简写为:i = (i%n)+1。
暴力 O(n^2):
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps = 1e-6;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+7;
const int maxn = 100+10; int n,L;
int a[maxn], b[maxn]; //下标从1开始 int main()
{
cin>>n>>L;
for(int i = 1; i<=n; i++)
cin>>a[i];
for(int i = 1; i<=n; i++)
cin>>b[i]; a[n+1] = L+a[1], b[n+1] = L+b[1]; //因为环,所以要求出尾到首的距离
for(int i = 1; i<=n; i++)
{
a[i] = a[i+1]-a[i]; //求出甲的间隔距离
b[i] = b[i+1]-b[i]; //求出乙的间隔距离
} int B = 0;
for(int k = 0; k<n; k++) //错开的幅度
{
int i;
for(i = 1; i<=n; i++) //甲间隔的下标
{
int j = (i+k)<=n?(i+k):(i+k)%n; //乙间隔的下标,因为循环,所以要特判。
if(a[i]!=b[j])
break;
}
if(i==1+n) //间隔距离完全匹配
{
B = 1;
break;
}
} printf("%s\n",B?"YES":"NO");
}
最小表示法 O(n):
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps = 1e-6;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+7;
const int maxn = 100+10; int n,L;
int a[maxn], b[maxn]; //下标从0开始 int getmin(int *s, int len) //返回最小表示法的始端
{
int i = 0, j = 1, k = 0;
while(i<len && j<len && k<len)
{
int t = s[(i+k)%len]-s[(j+k)%len];
if (!t) k++;
else
{
if (t>0) i += k+1;
else j += k+1;
if (i==j) j++;
k = 0;
}
}
return i<j?i:j;
} int main()
{
cin>>n>>L;
for(int i = 0; i<n; i++)
cin>>a[i];
for(int i = 0; i<n; i++)
cin>>b[i]; a[n] = L+a[0], b[n] = L+b[0]; //因为环,所以要求出尾到首的距离
for(int i = 0; i<n; i++)
{
a[i] = a[i+1]-a[i]; //求出甲的间隔距离
b[i] = b[i+1]-b[i]; //求出乙的间隔距离
} int B = 1;
int t1 = getmin(a, n);
int t2 = getmin(b, n);
for(int i = 0; i<n; i++)
{
int k1 = (t1+i)%n;
int k2 = (t2+i)%n;
if(a[k1]!=b[k2])
{
B = 0;
break;
}
} printf("%s\n",B?"YES":"NO");
}
Codeforces Round #394 (Div. 2) B. Dasha and friends —— 暴力 or 最小表示法的更多相关文章
- Codeforces Round #394 (Div. 2) C. Dasha and Password 暴力
C. Dasha and Password 题目连接: http://codeforces.com/contest/761/problem/C Description After overcoming ...
- Codeforces Round #394 (Div. 2) B. Dasha and friends 暴力
B. Dasha and friends 题目连接: http://codeforces.com/contest/761/problem/B Description Running with barr ...
- Codeforces Round #394 (Div. 2) E. Dasha and Puzzle(分形)
E. Dasha and Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #394 (Div. 2) E. Dasha and Puzzle 构造
E. Dasha and Puzzle 题目连接: http://codeforces.com/contest/761/problem/E Description Dasha decided to h ...
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem 贪心
D. Dasha and Very Difficult Problem 题目连接: http://codeforces.com/contest/761/problem/D Description Da ...
- Codeforces Round #394 (Div. 2) A. Dasha and Stairs 水题
A. Dasha and Stairs 题目连接: http://codeforces.com/contest/761/problem/A Description On her way to prog ...
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem —— 贪心
题目链接:http://codeforces.com/contest/761/problem/D D. Dasha and Very Difficult Problem time limit per ...
- Codeforces Round #394 (Div. 2) C. Dasha and Password —— 枚举
题目链接:http://codeforces.com/problemset/problem/761/C C. Dasha and Password time limit per test 2 seco ...
- Codeforces Round #394 (Div. 2) C. Dasha and Password
C. Dasha and Password time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
随机推荐
- SQL盲注工具BBQSQL
SQL盲注工具BBQSQL SQL注入是将SQL命令插入到表单.域名或者页面请求的内容中.在进行注入的时候,渗透测试人员可以根据网站反馈的信息,判断注入操作的结果,以决定后续操作.如果网站不反馈具 ...
- FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2224 同hdu5869 //#pragma comment(linker, "/STACK:1024 ...
- objective-c 类目(Category)和延展(Extension)
类目的基本概念: 如果有封装好的一个类,随着程序功能的增加,需要在类中增加一个方法,那我们就不必在那个类中做修改或者再定义一个子类,只需要在用到那个方法时添加一个该类的类目即可. 1.在类目定义的方法 ...
- Android Service实现双向通信(一)
首先,大概来总结一下与Service的通信方式有很多种: 通过BroadCastReceiver:这种方式是最简单的,只能用来交换简单的数据: 通过Messager:这种方式是通过一个传递一个Mess ...
- Android 源码编译记录
问题1:Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/ ...
- lfu-cache(需要O(1),所以挺难的)
https://leetcode.com/problems/lfu-cache/ 很难,看了下面的参考: https://discuss.leetcode.com/topic/69137/java-o ...
- Examples osgparticleshader例子学习
Examples osgparticleshader 粒子与shader的使用 参考文档 http://blog.csdn.net/csxiaoshui/article/details/234345 ...
- UVA571 - Jugs(数论)
UVA571 - Jugs(数论) 题目链接 题目大意:给你A和B的水杯.给你三种操作:fill X:把X杯里面加满水.empty X:把X杯中的水清空.pour X Y 把X的水倒入Y中直到一方满或 ...
- Python学习笔记8:标准库之正則表達式
Python拥有强大的标准库.从如今起,開始学习标准库中提供的一些经常使用功能. 首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pa ...
- sklearn特征选择和分类模型
sklearn特征选择和分类模型 数据格式: 这里.原始特征的输入文件的格式使用libsvm的格式,即每行是label index1:value1 index2:value2这样的稀疏矩阵的格式. s ...