例题
例题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(); }
时间: 2024-10-08 11:13:21