zoukankan      html  css  js  c++  java
  • aoj 0033 玉

    図のように二股に分かれている容器があります。1 から 10 までの番号が付けられた10 個の玉を容器の開口部 A から落とし、左の筒 B か右の筒 C に玉を入れます。板 D は支点 E を中心に左右に回転できるので、板 D を動かすことで筒 B と筒 C のどちらに入れるか決めることができます。

    開口部 A から落とす玉の並びを与えます。それらを順番に筒 B 又は筒 Cに入れていきます。このとき、筒 B と筒 C のおのおのが両方とも番号の小さい玉の上に大きい玉を並べられる場合は YES、並べられない場合は NO と出力するプログラムを作成してください。ただし、容器の中で玉の順序を入れ替えることはできないものとします。また、続けて同じ筒に入れることができるものとし、筒 B, C ともに 10 個の玉がすべて入るだけの余裕があるものとします。

    Input

    複数のデータセットが与えられます。1行目にデータセット数 N が与えられます。つづいて、N 行のデータセットが与えられます。各データセットに 10 個の番号が左から順番に空白区切りで与えられます。

    Output

    各データセットに対して、YES または NO を1行に出力して下さい。

    Sample Input

    2
    3 1 4 2 5 6 7 8 9 10
    10 9 8 7 6 5 4 3 2 1
    

    Output for the Sample Input

    YES
    NO

    给出一个序列,从1到10十个数顺序不同,从第一个数开始要么放到左边要么放到右边,要求无论左边右边从下往上要递增,是否能达成要求。
    dfs枚举各种情况。
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    #define Max 102
    using namespace std;
    int t,in[11],l[11],r[11],flag;
    void dfs(int a,int b,int k) {
        if(k > 10)flag = 1;
        if(flag)return;
        if(in[k] > l[a - 1]) {
            l[a] = in[k];
            dfs(a + 1,b,k + 1);
        }
        if(in[k] > r[b - 1]) {
            r[b] = in[k];
            dfs(a,b + 1,k + 1);
        }
    }
    int main(){
        while(~scanf("%d",&t)) {
            while(t --) {
                flag = 0;
                for(int i = 1;i <= 10;i ++) {
                    scanf("%d",&in[i]);
                }
                dfs(1,1,1);
                puts(flag ? "YES" : "NO");
            }
        }
        return 0;
    }
  • 相关阅读:
    jQuery事件委托
    jQuery-事件面试题
    jQuery事件处理
    文档—CUD
    jQuery练习
    jQuery-筛选
    5. Longest Palindromic Substring
    340. Longest Substring with At Most K Distinct Characters
    159. Longest Substring with At Most Two Distinct Characters
    438. Find All Anagrams in a String
  • 原文地址:https://www.cnblogs.com/8023spz/p/9460463.html
Copyright © 2011-2022 走看看