zoukankan      html  css  js  c++  java
  • Best Cow Line (POJ 3217)

    给定长度为N的字符串S,要构造一个长度为N的字符串T,起初,T是一个空串,随后反复进行下列任意操作。

    *从S的头部删除一个字符,加到T的尾部

    *从S的尾部删除一个字符,加到T的尾部

    目标是要构造字典序尽可能小的字符串T

     

    模拟情景,想出来一个有意思的比喻,写出来程序,俩个推土机开始在互相看不到对方的直线工作推物品,每个人每次走一步,并且先将物品重量较小的先推走, 由于没有手机,只能通过副驾驶通信员互相沟通,谁的前方物品较轻先推走,于是通信员下车检查,物品,当A,B通信员发现一方较轻时,就全部回各自的车报告向前走一步或者不走。但是通信员发现前方各自的第一个物品重量相同,就各自继续向前走一步直到发现重量较轻的返回各自的车内,报告走一步后者是不走。当通信员发现前方各自的重量都是一样的就对对方说,我们谁先走都行。互相谦让,选出一个通信员,回到车内,向前走一步。 直到推掉所有的物品,俩个车相见完成任务。

    #include<stdio.h>
    const int MAX=100;
    int N;
    char S[MAX+1];
    void f(){
    int a=0,b=N-1;
    int left;
    while(a<=b){//当俩个推土机还没有遇见的时候 
    for(int i=0;a+i<=b;i++){ //A/B通信员下车报告 
    if(S[a+i]<S[b-i]){ //A通信员发现前方物品重量较小 
    left=1;    break;
    }else if(S[a+i]>S[b-i]){ //B通信员发现前方物品较小 
    left=0; break;
    } 
    }
    if(left) printf("%c",S[a++]); //推土机向前开始工作 
    else    printf("%c",S[b--]);
    }
    }
    int main(){
    while(scanf("%d",&N)){
    //一定注意接收上一个字符 
    getchar();
    for(int i=0;i<N;i++){
    scanf("%c",&S[i]);
    }
    f();
    }
    return 0;
    }
  • 相关阅读:
    three.js 制作一个三维的推箱子游戏
    three.js 郭先生制作太阳系
    three.js 制作魔方
    three.js 欧拉角和四元数
    mysql
    重装系统后需要安装的软件
    python3.7 安装PyQt5
    Java读取文件
    linux 环境jdk安装
    linux 修改用户字符集
  • 原文地址:https://www.cnblogs.com/sky-z/p/4413873.html
Copyright © 2011-2022 走看看