zoukankan      html  css  js  c++  java
  • 嵊州D4T2 硬币 有人来教教我吗!

    嵊州D4T2 硬币

    【问题描述】

    卡拉赞的展览馆被入侵了。 展览馆是一条长长的通道,依次摆放着 n 个展柜(从西到东编号依次 为 1—n)。

    入侵者玛克扎尔在第 n 个展柜东边召唤了一个传送门,一共施放了 n 次法术,每一次会选取一个展柜,并在那个展柜里召唤一只小鬼, 小鬼被生成前该展柜里的展品会被自动转移(除此以外不能取出展品)。

    作为展览馆的守护者,馆长需要选择一个时机进行反击,消灭所有小鬼并摧毁传送门。

    展览馆的东端设置了一台巨大的 Morisa 炮,它可以摧毁它正前方一定 范围内的一切(为了安全,开炮时馆长必须在展览馆最西边)。馆长不想误伤展品,所以他需要移动展柜。

    馆长可以站在两个展柜中间,交换这两 个展柜。

    展览馆被设置了魔法结界,只可以单向通行,所幸在炮台旁有一 个传送门,可以通向展览馆的最西端,但是馆长每次通过传送门都会消耗 一枚麦迪文留下的幸运币,发射魔炮也需要一枚。

    现在,馆长想知道他每次召唤后进行反击最少需要多少枚硬币解决危机。

    来吧,展览馆只对访客开放。

    【输入格式】

    第一行一个数n。

    第二行n个数,A[i]表示第i次小鬼召唤的位置。

    【输出格式】

    一行 n+1 个数,B[i]表示第 i 次召唤后反击所需要的最小硬币数(第 一次是传送门的召唤)。

    【输入输出样例】

    coin.in coin.out
    3 1 2 3 1 2 3 1

    【样例解释】

    【数据说明】

    对于40%数据n ≤ 20

    对于60%数据n ≤ 100

    对于100%数据 1 ≤ n ≤ 300000

    有人来教教我吗!

    有人来教教我吗!

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 bool g[300001];
     5 int move(int num){
     6     if(n==num) return 1;
     7     for(int i=1;i<=num;i++)//假设鬼从左往右生成
     8     { 
     9         g[i]=1;
    10     }
    11     bool flag1=1,flag2=0;
    12     int coin=0;
    13     do//传送到左边 
    14     {
    15         for(int i=1;i<=n;i++)//模拟交换,每一组(不是次)只能从右边开始 
    16         {
    17             if(g[i]&&(!g[i+1])&&i!=n) swap(g[i],g[i+1]);
    18             if()
    19         }
    20         
    21         
    22         
    23         for(int i=1;i<=n;i++) 
    24         {
    25             if(g[i]&&(flag2==0)) {
    26                 flag2==1; 
    27                 if(i+num==n) flag1=0;
    28                 break;
    29             }
    30         }
    31     
    32     }
    33     while(flag1&&++coin);
    34     return coin+2;
    35 }
    36 
    37 int main(){
    38 //    freopen("coin.in","r",stdin);
    39 //    freopen("coin.out","w",stdout);
    40     cout<<"1";
    41     cin>>n;
    42     int a;
    43     for(int i=1;i<=n;i++){
    44         cin>>a;
    45         cout<<move(a)<<" ";
    46     }
    47     return 0;
    48 }
    49 /*
    50 发射魔炮需1个coin
    51 这与鬼的数量无关 
    52 
    53 假设鬼从左往右生成 
    54 原本馆长在最左边,故至少传送到左边去(为了安全)发射要一枚硬币
    55 
    56 
    57 
    58 */
    在下小见,请过目~
  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/send-off-a-friend/p/11185687.html
Copyright © 2011-2022 走看看