zoukankan      html  css  js  c++  java
  • POJ 1208 The Blocks Problem --vector

    http://poj.org/problem?id=1208

    晚点仔细看

    https://blog.csdn.net/yxz8102/article/details/53098575

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<stdlib.h>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<string>
    10 #define mem(a) memset(a,0,sizeof(a))
    11 using namespace std;
    12 const long long  N=1e9+5;
    13 #define LL long long
    14 vector<int> pile[30];
    15 int n;
    16 
    17 //查找木块a所在的pile和height
    18 void find_block(int a,int &p,int &h) //引用,相当于直接用实参
    19 {
    20     for(p=0;p<n;p++)
    21     {
    22         for(h=0;h<pile[p].size();h++)
    23         {
    24             if(pile[p][h]==a)  return;
    25 //vector就像一个二维数组,只是第一维大小固定(30),二维大小不固定。
    26         }
    27     }
    28 }
    29 //把p堆高度为h的木块上方所有的木块移回原位置
    30 void clear_above(int p,int h)
    31 {
    32     for(int i=h+1;i<pile[p].size();i++)
    33     {
    34         int t=pile[p][i];
    35         pile[t].push_back(t); ////把标号为t的木块放回原位,即t堆
    36     }
    37   pile[p].resize(h+1); //重新定义p堆的长度
    38 }
    39  //把p堆高度为h及其上方的木块整体移到p2的得尾部
    40 void pile_onto(int p,int h,int p2)
    41 {
    42     for(int i=h;i<pile[p].size();i++)
    43         pile[p2].push_back(pile[p][i]); //??
    44        pile[p].resize(h);
    45 }
    46 void print()
    47 {
    48     for(int i=0;i<n;i++)
    49     {
    50     printf("%d:",i);
    51     for(int j=0;j<pile[i].size();j++)
    52     {
    53         printf(" %d",pile[i][j]);
    54     }
    55     printf("
    ");
    56     }
    57 }
    58 int main()
    59 {
    60    int a,b;
    61    scanf("%d",&n);
    62    string s1,s2;
    63    for(int i=0;i<n;i++)
    64    {
    65        pile[i].push_back(i);
    66    }
    67    while(cin>>s1)
    68    {
    69        if (s1=="quit") break;
    70        cin>>a>>s2>>b;
    71        int pa,pb,ha,hb;
    72        find_block(a,pa,ha);
    73        find_block(b,pb,hb);
    74        if(pa==pb) continue;
    75        if(s2=="onto") clear_above(pb,hb);
    76        if(s1=="move") clear_above(pa,ha);
    77        pile_onto(pa,ha,pb);
    78    }
    79    print();
    80     return 0;
    81 }
    View Code
  • 相关阅读:
    Python并发编程之多进程(实战)
    ThreadPoolExecutor源码分析
    JDK 1.8 JVM的变化
    JDK1.8 hashMap源码分析
    Spring解决循环依赖
    spring
    实现一个可重入锁和不可重入锁
    B树与B+树
    WebMagic
    Java高频面试题
  • 原文地址:https://www.cnblogs.com/XXrll/p/10295066.html
Copyright © 2011-2022 走看看