CSUST 4019 听党指挥(思维+模拟)
题目链接
题目大意
给你一个长度为n的序列(n为偶数),序列为[1,2,3,....n],操作m次,进行m次操作后输出这个序列
有三种操作
1:每次将最左边的元素移到最右边,重复x次
2:每次将最右边的元素移动到最左边,重复x次
3:交换[1,2] [3,4] ...[n-1,n]的元素
题目思路
这个最开始我一直以为是模拟当然最后也是模拟,不过是巧妙的模拟
这个题目的关键就是,你要把这个序列分为一个奇数序列和一个偶数序列。你会发现这两个序列内部的元素永远不会变化而且如果把每一个序列的元素他们单独绕成一个环,这些元素的相对位置不会发生变化。你就只要求出每一个序列的最开始位置即可
代码
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e5+5,mod=1e9+7,inf=0x3f3f3f3f;
int n,m;
int a[maxn],b[maxn];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i+=2){
a[(i+1)/2]=i;
b[(i+1)/2]=i+1;
}
int beg1=1,beg2=1;//判断两个序列的开头元素
bool flag1=1,flag2=0;//判断两个序列开头元素为奇数还是偶数
for(int i=1,opt,x;i<=m;i++){
scanf("%d",&opt);
if(opt==2){
scanf("%d",&x);
beg1=(beg1-(x/2+(x%2&&!flag1))+(n/2)-1)%(n/2)+1;
beg2=(beg2-(x/2+(x%2&&!flag2))+(n/2)-1)%(n/2)+1;
}else if(opt==1){
scanf("%d",&x);
beg1=(beg1+(x/2+(x%2&&flag1))-1)%(n/2)+1;
beg2=(beg2+(x/2+(x%2&&flag2))-1)%(n/2)+1;
}
if(opt==3||(opt!=3&&x%2)){//如果转移时奇数,则交换奇偶性
swap(flag1,flag2);
}
}
if(flag1){
for(int i=1;i<=(n/2);i++){
printf("%d %d%c",a[(beg1+i-2+(n/2))%(n/2)+1],b[(beg2+i-2+(n/2))%(n/2)+1],(i==n/2)?'\n':' ');
}
}else{
for(int i=1;i<=(n/2);i++){
printf("%d %d%c",b[(beg2+i-2+(n/2))%(n/2)+1],a[(beg1+i-2+(n/2))%(n/2)+1],(i==n/2)?'\n':' ');
}
}
return 0;
}
CSUST 4019 听党指挥(思维+模拟)的更多相关文章
- 让CPU的占有率曲线听我指挥
最近我要在公司的一个study group负责AWS的AutoScaling功能的介绍.AWS可以根据instance(虚拟机)的CPU使用量进行scaling. 为了做demo,于是就有这样一个需求 ...
- 第1章 游戏之乐——让CPU占用率曲线听你指挥
让CPU占用率曲线听你指挥 写一个程序,让用于来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: CPU的占用率固定 ...
- 让cpu占用率曲线听你指挥(多核处理器)
编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html [目录] 不考 ...
- 编程之美 之 让CPU占用率听你指挥
昨天在bbs上淘到了这本编程之美.顺手刷了第一章,很有意思.第一章的要求是要控制CPU曲线,绘制出对应的形状. 拿到这个问题,我的第一反应是, 是不是有这么一个API,能在任务管理器上的对应区域直接绘 ...
- CF--思维练习--CodeForces - 216C - Hiring Staff (思维+模拟)
ACM思维题训练集合 A new Berland businessman Vitaly is going to open a household appliances' store. All he's ...
- 思维+模拟--POJ 1013 Counterfeit Dollar
Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are true silver d ...
- C. Okabe and Boxes 思维 模拟 or 线段树
C. Okabe and Boxes 这个题目是一个有点思维的模拟,当时没有想到, 思维就是这个栈的排序这里,因为每次直接排序肯定会t的,所以不可以这么写,那怎么表示排序呢? 就是直接把栈清空,如果栈 ...
- Codeforces Round #706 (Div. 2)B. Max and Mex __ 思维, 模拟
传送门 https://codeforces.com/contest/1496/problem/B 题目 Example input 5 4 1 0 1 3 4 3 1 0 1 4 3 0 0 1 4 ...
- Educational Codeforces Round 63 (Rated for Div. 2) B. Game with Telephone Numbers 博弈思维+模拟+贪心思维
题意:博弈题面 给出一个数字序列 (>=11) 有两个人任意删除数字 直到 数字只剩下11位 如果删除后的数字串开头是8那么就是第一个赢 否则就是第二个人赢 第一个人先手 数字序列一定是奇 ...
随机推荐
- PLC模拟量输入和数字量输入是什么
数字信号输入输出: 就是开关闭合,断开. 模拟量输入输出: 就是一个数值.比如:液位1.5米,温度30度,这样的数. 输入单元 输入单元是PLC与被控设备相连的输入接口,是信号进入PLC的桥梁,它的作 ...
- vue脚手架项目搭建失败
可能是ssl 的问题 解决办法: 1. npm config set strict-ssl false 2. npm install -g supervisor 以上完成后vue ui 或vue cr ...
- Mybatis日记
SqlSession build: ExecutorType :SIMPLE ,REUSE, BATCH, SIMPLE 为默认执行器: REUSE 为可重用执行器,重用Statement,执行器会缓 ...
- UOJ Round总结
#22. [UR #1]外星人 一开始随便搞出第一问答案,很显然的性质对$x$有变化的$a$一定是递减的,就拿一个桶直接记录可以达到的值 然后我开始想第二问,一开始想直接在这个桶上统计答案,然后发现不 ...
- C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】
C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现[可运行] #include <stdio.h> #include <stdlib.h> typedef int Key ...
- bert做阅读理解的一个细节
如上图所示,展示了如何用BERT来做信息抽取任务的结构图.注意一下几点即可: 1.将Question和Paragraph分别作为BERT的text1和text2输入. 2.start/end span ...
- C++ 基础 5:多态
1 什么是多态 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态. C++ 多态意味着由继承而产生的相关的不同的类,调用重写函数时,会根据实际的对象类型来执 ...
- Java的内存区域划分
内存分区简介 老生常谈的问题了,虽然网上一搜一大把,也很详细,但是我还是想写一写,通过自己的总结整理,加深一下印象. 我不知道学习Java内存分区有什么实际作用,但它就是像常识一样,一个使用Java语 ...
- gdb调试入门(上)
一.什么是gdb:gdb是GNU debugger的缩写,是编程调试工具二.gdb功能:1.启动程序,可根据用户要求随心所欲的运行程序(比如带参数)2.可让被调试的程序在用户指定的调试的断点处停住3. ...
- mysql参数总结
1.innodb_old_blocks_pct 确定modpoint位置,默认37,(3/8=37%)可以通过这个调整young与old比. innodb_old_blocks_time:当有大的查询 ...