• 嵊州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 */
    在下小见,请过目~
  • 相关阅读:
    JavaWeb 之 表单重复提交问题
    JavaWeb 之 验证码
    JavaScript 之 AJAX 请求
    JavaWeb 之 i18N 国际化
    JavaWeb 之 Gson 的使用
    JavaScript 之 JSON 对象
    JavaWeb 之 由 Tomcat 展示友好的错误信息页面
    【LeetCode-动态规划】完全平方数
    【LeetCode-递归】至少有K个重复字符的最长子串
    【LeetCode-设计】常数时间插入、删除和获取随机元素
  • 原文地址:https://www.cnblogs.com/send-off-a-friend/p/11185687.html
Copyright © 2020-2023  润新知