CodeForces - 669D——(思维题)
Little Artem is fond of dancing. Most of all dances Artem likes rueda — Cuban dance that is danced by pairs of boys and girls forming a circle and dancing together.
More detailed, there are n pairs of boys and girls standing in a circle. Initially, boy number 1 dances with a girl number 1, boy number 2 dances with a girl number 2and so on. Girls are numbered in the clockwise order. During the dance different moves are announced and all pairs perform this moves. While performing moves boys move along the circle, while girls always stay at their initial position. For the purpose of this problem we consider two different types of moves:
- Value x and some direction are announced, and all boys move x positions in the corresponding direction.
- Boys dancing with even-indexed girls swap positions with boys who are dancing with odd-indexed girls. That is the one who was dancing with the girl 1 swaps with the one who was dancing with the girl number 2, while the one who was dancing with girl number 3 swaps with the one who was dancing with the girl number 4 and so one. It's guaranteed that n is even.
Your task is to determine the final position of each boy.
Input
The first line of the input contains two integers n and q (2 ≤ n ≤ 1 000 000, 1 ≤ q ≤ 2 000 000) — the number of couples in the rueda and the number of commands to perform, respectively. It's guaranteed that n is even.
Next q lines contain the descriptions of the commands. Each command has type as the integer 1 or 2 first. Command of the first type is given as x ( - n ≤ x ≤ n), where 0 ≤ x ≤ n means all boys moves x girls in clockwise direction, while - x means all boys move x positions in counter-clockwise direction. There is no other input for commands of the second type.
Output
Output n integers, the i-th of them should be equal to the index of boy the i-th girl is dancing with after performing all q moves.
Examples
6 3
1 2
2
1 2
4 3 6 5 2 1
2 3
1 1
2
1 -2
1 2
4 2
2
1 3
1 4 3 2 题意:有n对男女围成一个圈跳舞,初始状态时,按顺时针给他们标上1-n号,男生1号和女生1号跳舞,男生2号和女生2号.....男生n号和女生n号。然后就下来有2种操作,操作1是所有男生移动 i 个位置,若 i 为负数,则向顺时针移动i个位置;
否则,操作2是相邻的两个男生交换位置。在所有操作中,牛生是不动的。问,在一系列操作之后,女生1-n对应的男生分别是多少号。 思路:在移动的过程中,一个数左右的数虽然在不断的改变,但是可以发现一点,所有奇数的相对位置不会改变,所有偶数的相对位置不会改变。
因为如果是移动一定的位置,是不会改变所有数的相对位置的;而如果是交换,则奇数之间是同步交换的,而偶数之间也是同步交换的。
所以,不管如何操作,一个奇数左边的第一个奇数和右边的第一个奇数都是不会改变的,偶数也是如此。(即相对位置没有改变)。
所以,这题的解法就明了了:我们可以记录下数字1和2的位置,开始时,数字1就在第一位,数字2就在第二位,若他们移动,标记也跟着移动。
确定了1和2的位置之后,就能推出所有数的位置了。 代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#define eps 1e-7
#define ll long long
#define inf 0x3f3f3f3f
#define pi 3.141592653589793238462643383279
using namespace std;
int ans[];
int main()
{
int n,m,oper,far;
while(cin>>n>>m)
{
int sum = ;
int flag1 = ,flag2 = ; //flag1标记1的位置(初始在第一个位置 0),flag2标记2的位置(初始在第二个位置1)
for(int i=; i<m; ++i)
{
scanf("%d",&oper);
if(oper == ) //如果是操作1,表示是平移
{
scanf("%d",&far);
flag1 += far; //标记也平移
flag2 += far;
flag1 = (flag1%n + n)%n; //为防止超过范围,要进行取模
flag2 = (flag2%n + n)%n;
}
else //操作2是交换
{
if(flag1%==) flag1++; //若 1 在偶数位置,则说明是和右边的交换
else flag1--; //否则和左边交换(下标从 0 开始) if(flag2%==) flag2++; // 2 同理
else flag2--; flag1 = (flag1%n + n)%n; //取模防越界
flag2 = (flag2%n + n)%n;
}
}
for(int i=; i<n; i+=) //根据1,2的位置推出所有数的位置
{
ans[(flag1+i)%n] = i+;
ans[(flag2+i)%n] = i+;
}
for(int i=; i<n; ++i)
printf("%d%c",ans[i],i==n-?'\n':' ');
}
return ;
}
CodeForces - 669D——(思维题)的更多相关文章
- Codeforces 424A (思维题)
Squats Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- Vova and Trophies CodeForces - 1082B(思维题)
Vova has won nn trophies in different competitions. Each trophy is either golden or silver. The trop ...
- CodeForces - 417B (思维题)
Crash Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- CodeForces - 417A(思维题)
Elimination Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit ...
- B - Sonya and Exhibition CodeForces - 1004B (思维题)
B. Sonya and Exhibition time limit per test 1 second memory limit per test 256 megabytes input stand ...
- codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题
http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
- C. Nice Garland Codeforces Round #535 (Div. 3) 思维题
C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- CodeForces - 631C ——(思维题)
Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...
- CodeForces - 1102A(思维题)
https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...
随机推荐
- Nagios配置文件说明
Lepus 安装配置:http://www.cnblogs.com/xuanzhi201111/p/5200757.html Nagios 各个目录用途说明如下:bin ...
- ROS注册级别LEVEL0-6,原来使用GRE通道是不要钱滴
GRE通道是没有个数限制的.如果只做一个分公司的PPTP,L2TP,等等,也是不用钱滴. 跑OSPF就不行了,必须要给钱.
- 常见的加密和解密算法—MD5
一.MD5加密概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 13 ...
- Solr进行Distinct 获取Count
今天碰到一个问题,数据之前入solr的时候并没有计算条数,现在需要计算出某几个表中去重后的总数. 由于solr的ISearch并没有相关的Distinct功能.想到一个解决方案是用Solr的Facet ...
- win10 svn commit无响应
只是发现其中的一个原因,发现.cs代码文件图标变红了,默认是用Code Writer打开,和SVN可能是冲突了,解决方式是用Code Writer打开一下.cs文件就可以了,原因可能是不打开一次Cod ...
- c# 二维码支持中文
/// <summary> /// 生成二维码,保存成图片 /// </summary> static void Generate1(string text) { Barcod ...
- 2 数据库开发--MySQL下载(windows)
Windows:(mysql) 操作: 0.下载安装mysql www.mysql.org downloads->进入社区community community 5.7.21 下载5.6 Mic ...
- sqlserver数据库导出成insert语句
点击数据库名称右键=========>任务========>生成脚本 一.表结构导出成sql语句 二.数据导出成sql语句
- gzip是一种数据格式,deflate是一种压缩算法
gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分:deflate是一种压缩算法,是huffman编码的一种加强. deflate与gzip解压的代码几乎相同,可以合成一块代码 ...
- dom4j读取XML文件内容
<?xml version="1.0" encoding="UTF-8"?> <RESULT> <VALUE> <NO ...