Codeforces 669D Little Artem and Dance (胡搞 + 脑洞)

题目链接:

  Codeforces 669D Little Artem and Dance

题目描述:

  给一个从1到n的连续序列,有两种操作:

    1:序列整体向后移动x个位置,

    2:序列中相邻的奇偶位置互换。

  问:q次操作后,输出改变后的序列?

解题思路:

  刚开始只看了第一组样例,发现相邻的奇偶位一直在一起,于是乎就开始writing code,写完后发现并不是正解!!!!就去推了一下第三个样例,总是这组实例通过,那组实例卡死,,,,,,,最后终于成功的Mengbility。今天突然想起来,其实整体向后移动,奇偶位置交换,并不会影响奇数的顺序和偶数的顺序。所以只需要记录1的位置和2的位置即可。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <stdio.h>
 4 #include <cstring>
 5 #include <queue>
 6 using namespace std;
 7
 8 const int maxn = 1000010;
 9 int ans[maxn];
10
11 int main ()
12 {
13     int n, q;
14
15     while (scanf ("%d %d", &n, &q) != EOF)
16     {
17         int wz1 = 0, wz2 = 1;
18
19         while (q --)
20         {
21             int op, x;
22
23             scanf ("%d", &op);
24
25             if (op == 1)
26             {
27                 scanf ("%d", &x);
28                 wz1 = ((wz1 + x) % n + n) % n;
29                 wz2 = ((wz2 + x) % n + n) % n;
30             }
31             else
32             {
33                 int a = wz1 % 2 ? -1 : 1;
34                 int b = wz2 % 2 ? -1 : 1;
35
36                 wz1 = ((wz1 + a) % n + n) % n;
37                 wz2 = ((wz2 + b) % n + n) % n;
38             }
39         }
40
41         for (int i=0; i<n; i+=2)
42         {
43             ans[(i+wz1)%n] = i + 1;
44             ans[(i+wz2)%n] = i + 2;
45         }
46         for (int i=0; i<n; i++)
47             printf ("%d%c", ans[i], i==n-1?‘\n‘:‘ ‘);
48     }
49     return 0;
50 }
时间: 2024-12-19 23:08:47

Codeforces 669D Little Artem and Dance (胡搞 + 脑洞)的相关文章

CodeForces 669D Little Artem and Dance

模拟. 每个奇数走的步长都是一样的,每个偶数走的步长也是一样的. 记$num1$表示奇数走的步数,$num2$表示偶数走的步数.每次操作更新一下$num1$,$num2$.最后输出. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #i

Codeforces 394D Physical Education and Buns 胡搞

题目链接:点击打开链接 题意:给定n个数的序列(能够排序) 操作一次能够使得某个数++或--. 问最少操作几次使得序列变成一个等差序列 输出: 第一行输出最少操作的次数 第二行输出等差数列里的最小项 和 公差的绝对值. 思路:枚举公差,公差范围一定是0到 2Max. 先排个序. 我们使得首项不变.形成一个等差数列. 然后让整个数列位移至 操作后的数组的差值 最小值 == 0.这样这个数列的操作次数= 最大的差值/2. done. #include <iostream> #include <

codeforces 442C C. Artem and Array(有深度的模拟)

题目 感谢JLGG的指导! 思路: //把数据转换成一条折线,发现有凸有凹 //有凹点,去掉并加上两边的最小值//无凹点,直接加上前(n-2)个的和(升序)//数据太大,要64位//判断凹与否,若一边等于,一边大于,那中间这个也算是凹进去的,所以判断时要加上等于 //有凹点,去掉并加上两边的最小值 //无凹点,直接加上前(n-2)个的和(升序) //数据太大,要64位 //判断凹与否,若一边等于,一边大于,那中间这个也算是凹进去的,所以判断时要加上等于 #include<stdio.h> #i

codeforces 641 C Little Artem and Dance

分析:算1和2的起点在哪里,然后往后累加就可以了. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> using namespace std; int ans[1000005]; int main() { //freopen("1.in",&q

CodeForces - 669D

题目链接:http://codeforces.com/problemset/problem/669/D 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

Codeforces Gym 100203G Good elements 暴力乱搞

原题链接:http://codeforces.com/gym/100203/attachments/download/1702/statements.pdf 题解 考虑暴力的复杂度是O(n^3),所以我们需要记录所有的ai+aj,如果当前考虑到了ak,那么就去前面寻找ai,使得ak-ai是我们记录过的和.整个算法的复杂度O(n^2). 代码 #include<iostream> #include<cstring> #include<cstdio> #include<

胡搞主定理

今天看算导,看到主定理这一块各种渐进.多项式大于小于什么的让我拙计,现在分享一下. 所谓主定理,就是用来解递归方程的一种方法,此方法可以用来求解大多数递归方程. 设递归方程为T(n)=aT(n/b)+f(n)  (其中a≥1,b>1) 主定理: (1)如果存在常数ε>0有f(n)=O(n^(logb^a-ε)),则T(n)=Θ(n^(logb^a)): (2)若f(n)=Θ(n^(logb^a)),则T(n)=Θ(n^(logb^a)logn2^n): (3)若对某个常数ε>0有f(n)

Codeforces Amr and Chemistry(数学+乱搞)

题意:给n个数,每个数每次可以乘二或除以二(向下取整相当于左移或右移),问最少经过多少次操作可以使这n个数变相等. 思路:首先考虑每个数的可能取值,将一个数表示成s*2^k的形式,s是奇数. 那么这个数的所有可能取值为s'*2^x,(s'=s/2,(s/2)/2,.....)且s'*2^x<=100000 因为这题数据范围不大,而且每个值可能的取值不多最多几百个,所以记录1到100000每个值可能被取到的次数以及总操作数,最后从1遍历到100000取最小的ans即可 ps:个人赛这道题做了一下午

codeforces 653C C. Bear and Up-Down(乱搞题)

题目链接: C. Bear and Up-Down time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The life goes up and down, just like nice sequences. Sequence t1, t2, ..., tn is called nice if the following two