码迷,mamicode.com
首页 > 编程语言 > 详细

紫书第5章 C++STL

时间:2016-02-01 01:48:57      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

例题

 

例题5-1 大理石在哪儿(Where is the Marble?,Uva 10474)

主要是熟悉一下sort和lower_bound的用法

关于lower_bound:

http://blog.csdn.net/niushuai666/article/details/6734403

此外还有upper_bound

http://blog.csdn.net/niushuai666/article/details/6734650

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <cctype>
using namespace std;

#define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define debug printf("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long

int a[10005];

int main()
{
     int n,q,i,x,cnt=1;
     while(~sf("%d%d",&n,&q) && n)
     {
          pf("CASE# %d:\n",cnt++);
          for(i=0;i<n;i++) sf("%d",&a[i]);
          sort(a,a+n);
          while(q--)
          {
               sf("%d",&x);
               int p = lower_bound(a,a+n,x)-a;
               if(a[p]!=x)
               {
                    pf("%d not found\n",x);
                    continue;
               }
               else
                    pf("%d found at %d\n",x,p+1);
          }
     }
}

 

例题5-2 木块问题(The Blocks Problem,Uva 101)

主要是熟悉vector的pb和resize,以及字符串结束的处理方法

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <cctype>
#include <vector>
using namespace std;

#define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long

vector<int> pile[30];
int n;

void find_block(int x,int &p,int &h)
{
     for(p=0;p<n;p++)
     {
          for(h=0;h<pile[p].size();h++)
          {
               if(pile[p][h] == x) return;
          }
     }
}

void clear_block(int p,int h)
{
     int i;
     for(i = h+1;i<pile[p].size();i++)
     {
          int b = pile[p][i];
          pile[b].pb(b);
     }
     pile[p].resize(h+1);
}

void onto_block(int p,int h,int p2)
{
     int i;
     for(i = h;i<pile[p].size();i++)
          pile[p2].pb(pile[p][i]);
     pile[p].resize(h);
}

void print()
{
     int p,h;
     for(p=0;p<n;p++)
     {
          pf("%d:",p);
          for(h=0;h<pile[p].size();h++)
          {
               pf(" %d",pile[p][h]);
          }
          blank;
     }
}

int main()
{
     int i,a,b;
     sf("%d",&n);
     for(i=0;i<n;i++) pile[i].pb(i);
     char s[5],s1[5];

     while(sf("%s",s) && s[0]!=q)
     {

          sf("%d%s%d",&a,s1,&b);
          int pa,pb,ha,hb;
          find_block(a,pa,ha);
          find_block(b,pb,hb);
          if(pa==pb) continue;
          if(!strcmp(s,"move")) clear_block(pa,ha);
          if(!strcmp(s1,"onto")) clear_block(pb,hb);
          onto_block(pa,ha,pb);
     }
     print();
}

 

紫书第5章 C++STL

标签:

原文地址:http://www.cnblogs.com/qlky/p/5174047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!