cf 251 B Playing with Permutations 暴力 分类讨论
题链;http://codeforces.com/problemset/problem/251/B
2 seconds
256 megabytes
standard input
standard output
Little Petya likes permutations a lot. Recently his mom has presented him permutation q1, q2, ..., qn of
length n.
A permutation a of length n is
a sequence of integers a1, a2, ..., an (1 ≤ ai ≤ n),
all integers there are distinct.
There is only one thing Petya likes more than permutations: playing with little Masha. As it turns out, Masha also has a permutation of length n.
Petya decided to get the same permutation, whatever the cost may be. For that, he devised a game with the following rules:
- Before the beginning of the game Petya writes permutation 1, 2, ..., n on the blackboard. After that Petya makes exactly k moves,
which are described below. - During a move Petya tosses a coin. If the coin shows heads, he performs point 1, if the coin shows tails, he performs point 2.
- Let's assume that the board contains permutation p1, p2, ..., pn at
the given moment. Then Petya removes the written permutation p from the board and writes another one instead: pq1, pq2, ..., pqn.
In other words, Petya applies permutation q(which he has got from his mother) to permutation p. - All actions are similar to point 1, except that Petya writes permutation t on the board, such that: tqi = pi for
all i from 1 to n.
In other words, Petya applies a permutation that is inverse to q to permutation p.
- Let's assume that the board contains permutation p1, p2, ..., pn at
We know that after the k-th move the board contained Masha's permutation s1, s2, ..., sn.
Besides, we know that throughout the game process Masha's permutation never occurred on the board before the k-th
move. Note that the game has exactly k moves, that is, throughout the game the coin was tossed exactly k times.
Your task is to determine whether the described situation is possible or else state that Petya was mistaken somewhere. See samples and notes to them for a better understanding.
The first line contains two integers n and k (1 ≤ n, k ≤ 100).
The second line contains n space-separated integers q1, q2, ..., qn(1 ≤ qi ≤ n)
— the permutation that Petya's got as a present. The third line contains Masha's permutation s, in the similar format.
It is guaranteed that the given sequences q and s are
correct permutations.
If the situation that is described in the statement is possible, print "YES" (without the quotes), otherwise print "NO"
(without the quotes).
4 1
2 3 4 1
1 2 3 4
NO
4 1
4 3 1 2
3 4 2 1
YES
4 3
4 3 1 2
3 4 2 1
YES
4 2
4 3 1 2
2 1 4 3
YES
4 1
4 3 1 2
2 1 4 3
NO
In the first sample Masha's permutation coincides with the permutation that was written on the board before the beginning of the game. Consequently, that violates the condition that Masha's permutation never occurred on the board before k moves
were performed.
In the second sample the described situation is possible, in case if after we toss a coin, we get tails.
In the third sample the possible coin tossing sequence is: heads-tails-tails.
In the fourth sample the possible coin tossing sequence is: heads-heads.
题意:感觉题目全然看不懂啊。。突然就冒出了个t。
题意是,给q数列,和s数列。然后p数列初始为1-n。然后通过p[q[i]]=p[i]。或者p[i]=p[q[i]]这两种变换,问有没有可能在k次变换后刚刚p数列为s数列。而且在这k次变换过程中。p数列不能等于s数列。p数列一開始就为s数列也不行。
做法:由于两个变换是相反的。所以能够通过两次分别两种变换来抵消。计算出p通过第一种变换要多少步能够达到s数列,然后另外一种变换要多少步。然后分类讨论。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include <set>
#include <map>
#define INF 999999999
#define eps 0.00001
#define LL __int64
#define pi acos(-1.0) int pp[1010],p[1010];
int q[1010],s[1010];
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",&q[i]);
for(int i=1;i<=n;i++)
scanf("%d",&s[i]);
for(int i=1;i<=n;i++)
pp[i]=p[i]=i;
int flag;
int T1=0;
while(T1<=k)//tou
{
flag=1;
for(int i=1;i<=n;i++)
{
if(pp[i]!=s[i])
flag=0;
}
if(flag)
break;
for(int i=1;i<=n;i++)
pp[i]=p[q[i]];
for(int i=1;i<=n;i++)
p[i]=pp[i];
T1++;
}
for(int i=1;i<=n;i++)
pp[i]=p[i]=i;
int T2=0;
while(T2<=k)//tou
{
flag=1;
for(int i=1;i<=n;i++)
{
if(pp[i]!=s[i])
flag=0;
}
if(flag)
break;
for(int i=1;i<=n;i++)
pp[q[i]]=p[i];
for(int i=1;i<=n;i++)
p[i]=pp[i];
T2++;
} if(T1==0||T2==0)//一開始就一样
printf("NO\n");
else if(k==1&&(T1==1||T2==1))//一步一样
printf("YES\n");
else if(k!=1&&T1==1&&T2==1)
printf("NO\n");
else if(T1==k+1&&T2==k+1)
printf("NO\n");
else if((T1-k)%2==0&&T1<=k)
printf("YES\n");
else if((T2-k)%2==0&&T2<=k)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
/*
4 1
2 3 4 1
1 2 3 4 */
cf 251 B Playing with Permutations 暴力 分类讨论的更多相关文章
- 【cf789B】Masha and geometric depression(分类讨论/暴力)
B. Masha and geometric depression 题意 在黑板上写数列,首项是b,公比是q,超过l时就停止不写.给定m个数,遇到后跳过不写.问一共写多少个数,如果无穷个输出inf. ...
- CF 715 E. Complete the Permutations
CF 715 E. Complete the Permutations 题目大意:给定两个排列\(p,q\)的一部分.定义两个排列\(p,q\)的距离为使用最少的交换次数使得\(p_i=q_i\).对 ...
- UVaLive 6862 Triples (数学+分类讨论)
题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...
- CodeForces - 789B B. Masha and geometric depression---(水坑 分类讨论)
CodeForces - 789B 当时题意理解的有点偏差,一直wa在了14组.是q等于0的时候,b1的绝对值大于l的时候,当b1的绝对值大于l的时候就应该直接终端掉,不应该管后面的0的. 题意告诉你 ...
- P5979 [PA2014]Druzyny dp 分治 线段树 分类讨论 启发式合并
LINK:Druzyny 这题研究了一下午 终于搞懂了. \(n^2\)的dp很容易得到. 考虑优化.又有大于的限制又有小于的限制这个非常难处理. 不过可以得到在限制人数上界的情况下能转移到的最远端点 ...
- Codeforces 1461F - Mathematical Expression(分类讨论+找性质+dp)
现场 1 小时 44 分钟过掉此题,祭之 大力分类讨论. 如果 \(|s|=1\),那么显然所有位置都只能填上这个字符,因为你只能这么填. scanf("%d",&n);m ...
- Codeforces 521E - Cycling City(点双连通分量+分类讨论)
Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...
- Codeforces 460D Little Victor and Set --分类讨论+构造
题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
随机推荐
- onWebView检查网页中文
问题:要检查网页中的一段文本: 开始我是这样写的: private final static String SPECIFIED_TEXT = "这个是一段中文"; onWebVie ...
- ASP.NET 5 简介
来源https://docs.asp.net/en/latest/conceptual-overview/aspnet.html ASP.NET 5 是ASP.NET的重新设计. 什么是ASP.NET ...
- MBT简述:基于模型的测试
参考: 1.http://blog.csdn.net/TMQ1225/article/details/53940828 2.http://tmq.qq.com/2016/12/graphwalker/ ...
- namespace使用方法
https://blog.csdn.net/CHIERYU/article/details/50262043 参考值这文献
- python 实现创建文件夹和创建日志文件
一.实现创建文件夹和日志 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author: nulige import os import datetime ...
- Spring获取properties文件中的属性
1.前言 本文主要是对这两篇blog的整理,感谢作者的分享 Spring使用程序方式读取properties文件 Spring通过@Value注解注入属性的几种方式 2.配置文件 applicatio ...
- ssh免密码登录的注意事项
centos配置完免密码登录(注意修改配置文件,/etc/ssh/sshd_config),合并完公钥后,有的时候还得需要输入密码.这时候应该检查一下authorized_keys的权限问题.本机的正 ...
- Android开发Tips(2)
欢迎Follow我的GitHub, 关注我的CSDN. 我会介绍关于Android的一些有趣的小知识点. 上一篇. 1. Dagger2的开发顺序 Module -> Component -&g ...
- highCharts怎样实现json数组数据的图形展示
昨天花了一天的时间学习了一下highcharts.主要的内容差点儿相同都看了一遍,然后试着写了一个完整的demo,期间可谓百转千回.费了不少功夫.终于还是实现了我所想要的效果图,接下来我将怎样实现统计 ...
- tomcat使用redis存储共享session
在tomcat集群环境下实现session共享有几种解决方式,这里介绍一种简单的方案. 使用redis对session进行存储,配置比較简单.webserver是tomcat6 1.下载jar包: c ...