zoukankan      html  css  js  c++  java
  • 数据结构_wow(泡泡的饭碗)

    问题描述

      饱了吗终于发现泡泡破解了它的代码并借此白吃白喝。饱了吗当即改变了自
    己的幸运儿生成源码,但是,又被机智的泡泡偷瞄到了,机智的泡泡马上意识到
    可能要饭碗不保了:
    每当有人参与抽奖,这个人就进入队列。当人数达到 n 的时候开奖一次。
    1. 开奖时,将执行 m 次操作,每次操作挑一个不超过 200 的数 d,且保证 d
    不超过人数的一半,然后把第 D 个人和第 n-D+1 个人这两个人之间的队伍反转:
    2. 反转前: 1,2,...,D-1,D,D+1,..., n-D+1, n-D+2,...n(从左往右编号)
    3. 反转后: 1,2,...,D-1,n-D+1,n-D,..., D+1, D, n-D+2...n(这里的编号
    是旋转前从左到右的编号)
    m 次操作完后从队头开始报号,没报到 x 的回到队尾,报到 x 的就是幸运儿
    啦;
    机智的泡泡马上又意识到,当 n 和 m 次操作和 x 的值已知的时候,幸运儿仍
    然是可以预知到是第几个参与抽奖的人的。
    机智的泡泡马上又意识到,自己的饭碗保住了。
    但是!机智的泡泡马上意识到一个问题,这个预知结果的代码不好打。
    但是!机智的泡泡马上想起了你。
    机智的泡泡马上把锅又扔给了你。


    ★数据输入
    输入第一行为三个正整数 n, m, x。
    接下来 m 行,第 i 行给出第 i 次操作的 d,如题;
    对于 80%的数据, 2<=n<=2000, 1<=m<=2000;
    对于 100%的数据, 2<=n<=100000, 1<=m<=100000
    1<=x<=1000,000,000, 1<=d<=min(n/2,200);


    ★数据输出
    输出幸运儿是第几个参加抽奖的人。

    输入示例 输出示例
    5 2 1
    2 1
    5


    输入示例 输出示例
    5 4 3
    2 1 2 1
    3


    解题思路

      假设有五个元素,对1~5与2~4哥翻转一遍,那么2~4相当于没有翻转

      使用flag确定目标值是否翻转,若翻转,用对称性可推出翻转后得index

    code

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int i;
     6     int num,opnum,x;
     7     int tmp;
     8     bool flag = false;
     9 
    10     scanf("%d %d %d",&num,&opnum,&x);
    11     x%=num;
    12     if(x==0) x=num;
    13     for(i=0; i<opnum; i++)
    14     {
    15         scanf("%d",&tmp);
    16         if(tmp<=x && x<=num-tmp+1)
    17             flag = !flag;
    18     }
    19 
    20     if(flag)
    21         printf("%d",num-x+1);
    22     else
    23         printf("%d",x);
    24 
    25     return 0;
    26 }
  • 相关阅读:
    无有和无穷
    算法设计 熄灯问题
    WPF 路由事件总结
    C# params关键字
    WPF 布局总结
    C#结构体和类的区别
    C#装箱和拆箱(值类型和引用类型之间的转换)
    OpenGL中平移、旋转、缩放矩阵堆栈操作
    OpenGL图元的颜色属性
    OpenGL基础图形的绘制
  • 原文地址:https://www.cnblogs.com/cbattle/p/7577571.html
Copyright © 2011-2022 走看看