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 ...
随机推荐
- 02 - Unit08:搜索笔记功能、搜索分页、处理插入数据库乱码问题
搜索笔记功能 按键监听事件 $("#search_note").keydown(function(event){ var code=event.keyCode; if(code== ...
- 常用数据结构的功能及复杂度总结(OI)
不定长数组 维护一个序列 在末尾插入/删除均摊O(1) 任意位置插入O(n) 指定位置查询/修改O(1) 空间O(n) 链表 维护一个序列 定位到第i个位置O(n) 在任意位置(已定位到该位置)插入/ ...
- 学习blus老师js(4)--DOM
一.DOM节点 1.获取子节点: childNodes nodeType 节点类型 children 只包括元素,不包括文本: 子节点只算第一层.只算孩子一级 ...
- C++快速输出一个整数的二进制表示(不用写函数)
如果要输出int型的整数x,代码为: cout << bitset<>(x) << endl; 如果要输出long long型的整数x,代码为: cout < ...
- yum安装nagois
多少年前就装过了,今天再来用yum装一次,都忘干净了~~ 主监控机:CentOS 6.5 192.168.0.105被监控机:CentOS 6.5 192.168.0.107 主监控机设置:1.安装e ...
- Util-linux-ng-2.17
yum install -y util-linux-ng 即可安装Util-linux-ng,其中包含了非常多的软件 Util-linux-ng 的内容 安装的程序:addpart, agetty, ...
- CentOS+Tomcat环境搭建
此次搭建是基于: CentOS release 5.6 (Final) Kernel \r on an \m 搭建准备:http://pan.baidu.com/s/1pLt1lLh apache-t ...
- extjs [1]
1.JS 类的声明,和对象的创建 2.原始方法用EXTJS创建一个window 3.利用一个按钮触发window窗体,了解一下EXTJS的事件机制 4.用EXTJS4.0的create来创建windo ...
- 决策树与树集成模型(bootstrap, 决策树(信息熵,信息增益, 信息增益率, 基尼系数),回归树, Bagging, 随机森林, Boosting, Adaboost, GBDT, XGboost)
1.bootstrap 在原始数据的范围内作有放回的再抽样M个, 样本容量仍为n,原始数据中每个观察单位每次被抽到的概率相等, 为1/n , 所得样本称为Bootstrap样本.于是可得到参数θ的 ...
- Linux CPU 100%, kill -9 杀不掉进程
1: top 查看 >top -c 此时 我们使用kill -9 15003, 杀掉这个进程短暂的CPU降低几秒, 然后死灰复燃了, 又一个进程占了CPU 99% 2: 查看15003 进程状态 ...