zoukankan      html  css  js  c++  java
  • B: Twilight的卡牌游戏(1311)

    题目链接:http://acm.xidian.edu.cn/problem.php?id=1311

      先在vector直接储存值的初始位置,用vector来操作数的删除(注意每次删完后面的数都会自己定上来);关于剪枝,本题接近二分操作,复杂度很小,但注意,可以手动直接操作第一次,直接减去偶数位置的数,后面数据就小很多了;

     1 #include<stdio.h>
     2 #include<vector>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int T;
     8     vector<int> A;
     9     while(scanf("%d",&T) != EOF)
    10     {
    11         while(T--)
    12         {
    13         A.clear();
    14         int n;
    15         scanf("%d",&n);
    16         if(n <= 3)                                    //初始小于三个数做特判 
    17         {
    18             for(int i = 1;i <= n;i++)
    19                 {
    20                     if(i == 1)
    21                         printf("%d",i);
    22                     else
    23                         printf(" %d",i);
    24                 }
    25             printf("
    ");
    26             continue;
    27         } 
    28         A.push_back(0);
    29         int k = 0;
    30         for(int i = 1;i <= n;i = 2 * k + 1)            //初始放入vector就直接只放奇数 
    31         {
    32             A.push_back(i);
    33             k++;
    34         }
    35         int t = 2;
    36         while(1)
    37         {
    38             if(A.size() <= 4)
    39                 break;
    40             if(t % 2 == 0)
    41             {
    42                 for(int i = 3;i < A.size();i = i + 3)
    43                     {
    44                         A.erase(A.begin() + i);
    45                         i--;
    46                     }
    47             }
    48             if(t % 2 != 0)
    49             {
    50                 for(int i = 2;i < A.size();i = i + 2)
    51                     {
    52                         A.erase(A.begin() + i);
    53                         i--;
    54                     }
    55             }
    56             t++;
    57         }
    58         for(int i = 1;i < A.size();i++)
    59         {
    60             if(i == 1)                        //依旧是处理空格 
    61             printf("%d",A[i]);
    62             else
    63             printf(" %d",A[i]);            
    64         }
    65         printf("
    ");
    66         }
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    JS两个页面通过URL传值
    新起点 新开始
    Spring Boot 常见标签
    关于Redis缓存数据库
    JPA问题汇总
    Dynamic 报表服务开发
    Dynamic crm自定义页面
    Dynamic 根据用户的角色权限设置相应的按钮显示
    Dynamic 工具类
    Dynamic 点击按钮,弹出一个漂浮页面
  • 原文地址:https://www.cnblogs.com/Dicer/p/9100843.html
Copyright © 2011-2022 走看看