zoukankan      html  css  js  c++  java
  • CodeForces 669D(小思维+负数取模)

    题目链接:http://codeforces.com/problemset/problem/669/D

    题意:q次按顺序操作,操作1:整体移动给定单位距离;操作2:奇偶位互换,要求输出q次操作后的情况

    思路:不管是整体移动还是奇偶互换,所有的奇数之间的相对位置是不变的,这也意味着所有的偶数相对位置也是不变的。(1后两位是3,3后两位是5;2后两位是4,4后两位是6……依此类推)

    代码:

     1 #include<stdio.h>
     2 
     3 const int maxn = 1e6 + 10;
     4 int num[maxn];
     5 int n, q;
     6 int op, step;
     7 int pos1, pos2;    //记录数字1的位置和数字2的位置
     8 
     9 int main()
    10 {
    11     while(scanf ("%d %d", &n, &q) != EOF)
    12     {
    13         pos1 = 0;
    14         pos2 = 1;    //初始位置
    15         while(q--)
    16         {
    17             scanf("%d", &op);
    18             if(op == 1)    //整体移动
    19             {
    20                 scanf("%d", &step);
    21                 pos1 = ((pos1 + step) % n + n) % n;
    22                 pos2 = ((pos2 + step) % n + n) % n;
    23             }
    24             else    //奇偶交换
    25             {
    26                 int dis1 = pos1 % 2 ? -1 : 1;    //数组下标代表位置,下标从0开始
    27                 int dis2 = pos2 % 2 ? -1 : 1;    //奇数位前移+1,偶数位后移-1
    28                 pos1 = ((pos1 + dis1) % n + n) % n;
    29                 pos2 = ((pos2 + dis2) % n + n) % n;
    30             }
    31         }
    32         for(int i = 0; i < n; i += 2)
    33         {
    34             num[(i + pos1) % n] = i + 1;
    35             num[(i + pos2) % n] = i + 2;
    36         }
    37         for(int i = 0; i < n - 1; i++)
    38         {
    39             printf("%d ", num[i]);
    40         }
    41         printf("%d
    ", num[n - 1]);
    42     }
    43     return 0;
    44 }

    小问题:

      1、用cin和cout会TLE;

      2、(a + b) % n 与 ((a + b) % n + n) % n是有区别的,后者可处理负数问题

    负数取模:(参考博客:https://blog.csdn.net/creat2012/article/details/17999929

      

    //n = 10
    5
    2 (a + b) % n: 7 ((a + b) % n + n) % n: 7 -5 2 (a + b) % n: -3 ((a + b) % n + n) % n: 7 5 -2 (a + b) % n: 3 ((a + b) % n + n) % n: 3
  • 相关阅读:
    Execution Context(EC) in ECMAScript
    Prototype Chain
    一次websocket的抓包体验
    nodejs 解析 base64 文本
    curl常用命令行总结
    nodejs stream基础知识
    typedarrays splice
    nodejs stream & buffer 互相转换
    nodejs buffer 总结
    ajax stream 一边下载二进制数据一边处理
  • 原文地址:https://www.cnblogs.com/friend-A/p/9359891.html
Copyright © 2011-2022 走看看