例题

例题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

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <cctype>
  10. using namespace std;
  11.  
  12. #define mem(a,b) memset(a,b,sizeof(a))
  13. #define pf printf
  14. #define sf scanf
  15. #define spf sprintf
  16. #define debug printf("!\n")
  17. #define INF 10000
  18. #define MAXN 5010
  19. #define MAX(a,b) a>b?a:b
  20. #define blank pf("\n")
  21. #define LL long long
  22.  
  23. int a[];
  24.  
  25. int main()
  26. {
  27. int n,q,i,x,cnt=;
  28. while(~sf("%d%d",&n,&q) && n)
  29. {
  30. pf("CASE# %d:\n",cnt++);
  31. for(i=;i<n;i++) sf("%d",&a[i]);
  32. sort(a,a+n);
  33. while(q--)
  34. {
  35. sf("%d",&x);
  36. int p = lower_bound(a,a+n,x)-a;
  37. if(a[p]!=x)
  38. {
  39. pf("%d not found\n",x);
  40. continue;
  41. }
  42. else
  43. pf("%d found at %d\n",x,p+);
  44. }
  45. }
  46. }

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

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

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <cctype>
  10. #include <vector>
  11. using namespace std;
  12.  
  13. #define mem(a,b) memset(a,b,sizeof(a))
  14. #define pf printf
  15. #define sf scanf
  16. #define spf sprintf
  17. #define pb push_back
  18. #define debug printf("!\n")
  19. #define INF 10000
  20. #define MAXN 5010
  21. #define MAX(a,b) a>b?a:b
  22. #define blank pf("\n")
  23. #define LL long long
  24.  
  25. vector<int> pile[];
  26. int n;
  27.  
  28. void find_block(int x,int &p,int &h)
  29. {
  30. for(p=;p<n;p++)
  31. {
  32. for(h=;h<pile[p].size();h++)
  33. {
  34. if(pile[p][h] == x) return;
  35. }
  36. }
  37. }
  38.  
  39. void clear_block(int p,int h)
  40. {
  41. int i;
  42. for(i = h+;i<pile[p].size();i++)
  43. {
  44. int b = pile[p][i];
  45. pile[b].pb(b);
  46. }
  47. pile[p].resize(h+);
  48. }
  49.  
  50. void onto_block(int p,int h,int p2)
  51. {
  52. int i;
  53. for(i = h;i<pile[p].size();i++)
  54. pile[p2].pb(pile[p][i]);
  55. pile[p].resize(h);
  56. }
  57.  
  58. void print()
  59. {
  60. int p,h;
  61. for(p=;p<n;p++)
  62. {
  63. pf("%d:",p);
  64. for(h=;h<pile[p].size();h++)
  65. {
  66. pf(" %d",pile[p][h]);
  67. }
  68. blank;
  69. }
  70. }
  71.  
  72. int main()
  73. {
  74. int i,a,b;
  75. sf("%d",&n);
  76. for(i=;i<n;i++) pile[i].pb(i);
  77. char s[],s1[];
  78.  
  79. while(sf("%s",s) && s[]!='q')
  80. {
  81.  
  82. sf("%d%s%d",&a,s1,&b);
  83. int pa,pb,ha,hb;
  84. find_block(a,pa,ha);
  85. find_block(b,pb,hb);
  86. if(pa==pb) continue;
  87. if(!strcmp(s,"move")) clear_block(pa,ha);
  88. if(!strcmp(s1,"onto")) clear_block(pb,hb);
  89. onto_block(pa,ha,pb);
  90. }
  91. print();
  92. }

例题5-3 安迪的第一个字典(Andy's First Dictionary,Uva 10815)

主要是熟悉set的insert还有iterator

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <cctype>
  10. #include <vector>
  11. #include <set>
  12. #include <sstream>
  13. using namespace std;
  14.  
  15. #define mem(a,b) memset(a,b,sizeof(a))
  16. #define pf printf
  17. #define sf scanf
  18. #define spf sprintf
  19. #define pb push_back
  20. #define debug printf("!\n")
  21. #define INF 10000
  22. #define MAXN 5010
  23. #define MAX(a,b) a>b?a:b
  24. #define blank pf("\n")
  25. #define LL long long
  26.  
  27. set<string> dict;
  28.  
  29. int main()
  30. {
  31. string s,buf;
  32. while(cin>>s)
  33. {
  34. int i;
  35. for(i=;i<s.length();i++)
  36. {
  37. if(isalpha(s[i])) s[i] = tolower(s[i]);
  38. else s[i] = ' ';
  39. }
  40. stringstream ss(s);
  41. while(ss>>buf) dict.insert(buf);
  42. }
  43. for(set<string>::iterator it = dict.begin();it!=dict.end();++it)
  44. cout<<*it<<endl;
  45. }

例题5-4 反片语(Ananagrams,Uva 156)

主要是熟悉map的用法。

给string和vector<string>排序可以用sort(str.begin(),str.end());即字典序

map<string,int> mp可以直接用mp[string] = int;在这道题可以表示某个字符串出现的次数

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <cctype>
  10. #include <vector>
  11. #include <set>
  12. #include <map>
  13. #include <sstream>
  14. using namespace std;
  15.  
  16. #define mem(a,b) memset(a,b,sizeof(a))
  17. #define pf printf
  18. #define sf scanf
  19. #define spf sprintf
  20. #define pb push_back
  21. #define debug printf("!\n")
  22. #define INF 10000
  23. #define MAXN 5010
  24. #define MAX(a,b) a>b?a:b
  25. #define blank pf("\n")
  26. #define LL long long
  27.  
  28. map<string,int> cnt;
  29. vector<string> words;
  30.  
  31. string repr(const string &s)
  32. {
  33. string ans = s;
  34. for(int i=;i<ans.length();i++)
  35. {
  36. ans[i] = tolower(ans[i]);
  37. }
  38. sort(ans.begin(),ans.end());
  39. return ans;
  40. }
  41.  
  42. int main()
  43. {
  44. string s;
  45. while(cin>>s)
  46. {
  47. if(s[]=='#') break;
  48. words.pb(s);
  49. string r = repr(s);
  50. if(!cnt.count(r)) cnt[r] = ;
  51. cnt[r]++;
  52. }
  53. vector<string> ans;
  54. for(int i = ;i<words.size();i++)
  55. {
  56. if(cnt[repr(words[i])]==) ans.pb(words[i]);
  57. }
  58. sort(ans.begin(),ans.end());
  59. for(int i = ;i<ans.size();i++)
  60. {
  61. cout<<ans[i]<<endl;
  62. }
  63.  
  64. }

例题5-5 集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC2006,UVa12096)

map映射+vector,inserter插入迭代器的使用,set_union和set_intersection

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <cctype>
  10. #include <vector>
  11. #include <iterator>
  12. #include <set>
  13. #include <map>
  14. #include <sstream>
  15. using namespace std;
  16.  
  17. #define mem(a,b) memset(a,b,sizeof(a))
  18. #define pf printf
  19. #define sf scanf
  20. #define spf sprintf
  21. #define pb push_back
  22. #define debug printf("!\n")
  23. #define INF 10000
  24. #define MAXN 5010
  25. #define MAX(a,b) a>b?a:b
  26. #define blank pf("\n")
  27. #define LL long long
  28. #define ALL(x) x.begin(),x.end()
  29. #define INS(x) inserter(x,x.begin())
  30.  
  31. typedef set<int> Set;
  32. map<Set,int> IDcache;
  33. vector<Set> Setcache;
  34.  
  35. int ID(Set x)
  36. {
  37. if(IDcache.count(x)) return IDcache[x];
  38. Setcache.pb(x);
  39. return IDcache[x] = Setcache.size() - ;
  40. }
  41.  
  42. int main()
  43. {
  44. stack<int> s;
  45. int t;
  46. cin>>t;
  47. while(t--)
  48. {
  49. int n;
  50. cin>>n;
  51. while(n--)
  52. {
  53. string op;
  54. cin>>op;
  55. if(op[]=='P') s.push(ID(Set()));
  56. else if(op[]=='D') s.push(s.top());
  57. else
  58. {
  59. Set x1 = Setcache[s.top()];s.pop();
  60. Set x2 = Setcache[s.top()];s.pop();
  61. Set x;
  62. if(op[]=='A')
  63. {
  64. x = x2;
  65. x.insert(ID(x1));
  66. }
  67. if(op[]=='U') set_union(ALL(x1),ALL(x2),INS(x));
  68. if(op[]=='I') set_intersection(ALL(x1),ALL(x2),INS(x));
  69. s.push(ID(x));
  70. }
  71. cout<<Setcache[s.top()].size()<<endl;
  72. }
  73. cout<<"***"<<endl;
  74. }
  75.  
  76. }

例题5-6 团体队列(Team Queue,UVa540)

队列的使用

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define INF 10000
  25. #define MAXN 5010
  26. #define MAX(a,b) a>b?a:b
  27. #define blank pf("\n")
  28. #define LL long long
  29. #define ALL(x) x.begin(),x.end()
  30. #define INS(x) inserter(x,x.begin())
  31.  
  32. int main()
  33. {
  34. int t,x,i,kase=;
  35. while(sf("%d",&t),t)
  36. {
  37. pf("Scenario #%d\n",kase++);
  38. map<int,int> team;
  39. for(i=;i<t;i++)
  40. {
  41. int n;
  42. sf("%d",&n);
  43. while(n--)
  44. {
  45. sf("%d",&x);
  46. team[x] = i;
  47. }
  48. }
  49. queue<int> q,q2[];
  50. string op;
  51. while(cin>>op && op[]!='S')
  52. {
  53. if(op[] == 'E')
  54. {
  55. int r;
  56. sf("%d",&r);
  57. int y = team[r];
  58. if(q2[y].empty()) q.push(y);
  59. q2[y].push(r);
  60. }
  61. if(op[] == 'D')
  62. {
  63. int y = q.front();
  64. pf("%d\n",q2[y].front());
  65. q2[y].pop();
  66. if(q2[y].empty())
  67. q.pop();
  68. }
  69. }
  70. blank;
  71. }
  72. }

例题5-7 丑数(Ugly Numbers,Uva 136)

优先队列的应用

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define INF 10000
  25. #define MAXN 5010
  26. #define MAX(a,b) a>b?a:b
  27. #define blank pf("\n")
  28. #define LL long long
  29. #define ALL(x) x.begin(),x.end()
  30. #define INS(x) inserter(x,x.begin())
  31. #define pqueue priority_queue
  32.  
  33. int con[]={,,};
  34.  
  35. int main()
  36. {
  37. int i,j;
  38. set<LL> s;
  39. pqueue<LL,vector<LL>,greater<LL> >pq;
  40. s.insert();
  41. pq.push();
  42. for(i=;;i++)
  43. {
  44. LL t = pq.top();pq.pop();
  45. if(i==)
  46. {
  47. pf("The 1500'th ugly number is %I64d.\n",t);
  48. break;
  49. }
  50. for(j=;j<;j++)
  51. {
  52. LL x = t*con[j];
  53. if(!s.count(x))
  54. {
  55. s.insert(x);
  56. pq.push(x);
  57. }
  58. }
  59. }
  60. }

例题5-8 Unixls命令(Unix ls,UVa400)

对于这样控制格式的要求(比如对齐)可以用规定长度然后填充的方式输出

col求出来后,row应该是(n-1)/col+1而不是n/col

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define INF 10000
  25. #define MAXN 5010
  26. #define MAX(a,b) a>b?a:b
  27. #define blank pf("\n")
  28. #define LL long long
  29. #define ALL(x) x.begin(),x.end()
  30. #define INS(x) inserter(x,x.begin())
  31. #define pqueue priority_queue
  32.  
  33. const int maxcol = ;
  34. string filenames[];
  35.  
  36. void print(const string& s,int len,char extra)
  37. {
  38. cout<<s;
  39. for(int i = ;i<len-s.length();i++)
  40. cout<<extra;
  41. }
  42.  
  43. int main()
  44. {
  45. int n,i,j;
  46. while(~sf("%d",&n))
  47. {
  48. int ma = ;
  49. for(i=;i<n;i++)
  50. {
  51. cin>>filenames[i];
  52. ma = max(ma,(int)filenames[i].length());
  53. }
  54. int col = (maxcol-ma)/(ma+) + ;
  55. int row = (n-)/col +;
  56. print("",,'-');
  57. blank;
  58. sort(filenames,filenames+n);
  59. for(i = ;i<row;i++)
  60. {
  61. for(j=;j<col;j++)
  62. {
  63. int idx = j*row + i;
  64. if(idx<n) print(filenames[idx],j==col-?ma:ma+,' ');
  65. }
  66. blank;
  67. }
  68. }
  69. }

例题5-9 数据库(Database,ACM/ICPC NEERC 2009,UVa1592)

这题的思路是:

因为字符串比较的话比较慢,所以可以先做一个预处理,将所有字符串用一个ID表示

读取字符是这样的:因为字符用,和回车分隔,所以可以用getchar每个字符读取,遇到,或\n就处理

处理字符可以用map映射,如果count==0就pb到ID集vector里

然后就是遍历。先用一个结构保存两个ID。三重循环遍历,如果相同的话则输出

struct里小于号的定义很不错,return x<r.x || x==r.x && y<r.y;先看第一个的大小,相等再看第二个

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define INF 10000
  25. #define MAXN 5010
  26. #define MAX(a,b) a>b?a:b
  27. #define blank pf("\n")
  28. #define LL long long
  29. #define ALL(x) x.begin(),x.end()
  30. #define INS(x) inserter(x,x.begin())
  31. #define pqueue priority_queue
  32.  
  33. const int ROW = +;
  34. const int COL = +;
  35.  
  36. int m,n;
  37.  
  38. struct node
  39. {
  40. int x,y;
  41. node(int xx,int yy):x(xx),y(yy){}
  42. bool operator <(const node& r) const { return x<r.x || x==r.x && y<r.y;}
  43. };
  44.  
  45. map<string,int> IDcache;
  46. vector<string> stringSet;
  47. vector<int> Text[ROW];
  48. map<node,int> data;
  49.  
  50. int ID(string str)
  51. {
  52. //cout<<"str: "<<str<<endl;
  53. if(IDcache.count(str)) return IDcache[str];
  54. stringSet.pb(str);
  55. //pf("id: %d\n",stringSet.size()-1);
  56. return IDcache[str] = stringSet.size()-;
  57. }
  58.  
  59. void read()
  60. {
  61. string str;
  62. int i,j;
  63. char ch = getchar();
  64. for(i=;i<n;i++)
  65. {
  66. for(;;)
  67. {
  68. ch = getchar();
  69. if(ch=='\r' || ch == '\n')
  70. {
  71. if(!str.empty()) Text[i].pb(ID(str));
  72. str.clear();
  73. break;
  74. }
  75. if(ch!=',') str+=ch;
  76. else
  77. {
  78. Text[i].pb(ID(str));str.clear();
  79. }
  80. }
  81. // cout<<"i "<<i<<endl;
  82. // for(j=0;j<Text[i].size();j++)
  83. // cout<<"j "<<j<<" Text: "<<Text[i][j]<<endl;
  84. }
  85.  
  86. }
  87.  
  88. void sol()
  89. {
  90. int c1,c2,r,i,j,k;
  91. for(c1=;c1<m;c1++)
  92. {
  93. for(c2=c1+;c2<m;c2++)
  94. {
  95. data.clear();
  96. for(r=;r<n;r++)
  97. {
  98. int x = Text[r][c1];
  99. int y = Text[r][c2];
  100. node p(x,y);
  101. if(data.count(p))
  102. {
  103. pf("NO\n");
  104. pf("%d %d\n%d %d\n",data[p]+,r+,c1+,c2+);
  105. return;
  106. }
  107. else
  108. data[p]= r;
  109. }
  110. }
  111. }
  112. pf("YES\n");
  113. }
  114.  
  115. int main()
  116. {
  117. int i,j;
  118. while(~sf("%d%d",&n,&m))
  119. {
  120. read();
  121. sol();
  122. for(i=;i<n;i++) Text[i].clear();
  123. IDcache.clear();
  124. stringSet.clear();
  125. }
  126. }

例题5-10 PGA巡回赛的奖金(PGA Tour Prize Money,ACM/ICPC World Finals1990,UVa207)

例题5-11 邮件传输代理的交互(The Letter Carrier's Rounds, ACM/ICPC World Finals 1999, UVa814)

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define INF 10000
  25. #define MAXN 5010
  26. #define MAX(a,b) a>b?a:b
  27. #define blank pf("\n")
  28. #define LL long long
  29. #define ALL(x) x.begin(),x.end()
  30. #define INS(x) inserter(x,x.begin())
  31. #define pqueue priority_queue
  32.  
  33. set<string> addr;
  34.  
  35. void getn(string &s,string &user,string &mta)
  36. {
  37. int k = s.find('@');
  38. user = s.substr(,k);
  39. mta = s.substr(k+);
  40. }
  41.  
  42. int main()
  43. {
  44. string s,mta,user,ma,na,user1,mta1,t;
  45. int n;
  46. while(cin>>s && s[]!='*')
  47. {
  48. cin>>ma>>n;
  49. while(n--)
  50. {
  51. cin>>na;
  52. addr.insert(na+"@"+ma);
  53. }
  54. }
  55.  
  56. while(cin>>s && s!="*")
  57. {
  58. getn(s,user,mta);
  59.  
  60. vector<string> MTA;
  61. map<string,vector<string> > dest;//用户
  62. set<string> vis;
  63. while(cin>>t && t!="*")
  64. {
  65. getn(t,user1,mta1);
  66. if(vis.count(t)) continue;
  67. vis.insert(t);
  68. if(!dest.count(mta1))
  69. {
  70. MTA.pb(mta1);
  71. dest[mta1] = vector<string>();
  72. }
  73. dest[mta1].pb(t);
  74. }
  75. string data;
  76. getline(cin,t);
  77.  
  78. while(getline(cin,t) && t[]!='*')
  79. {
  80. data+=" " + t +"\n";
  81. }
  82.  
  83. for(int i = ;i<MTA.size();i++)
  84. {
  85. string mta2 = MTA[i];
  86. vector<string> users = dest[mta2];
  87. cout<<"Connection between "<<mta<<" and "<<mta2<<endl;
  88. cout<<" HELO "<<mta<<endl;
  89. pf(" 250\n");
  90. cout<<" MAIL FROM:<"<<s<<">\n";
  91. pf(" 250\n");
  92. bool ok = false;
  93. for(int j = ;j<users.size();j++)
  94. {
  95. cout<<" RCPT TO:<"<<users[j]<<">"<<endl;
  96. if(addr.count(users[j]))
  97. {
  98. ok = true;
  99. pf(" 250\n");
  100. }
  101. else
  102. pf(" 550\n");
  103. }
  104. if(ok)
  105. {
  106. cout<<" DATA\n 354\n"<<data;
  107. pf(" .\n 250\n");
  108. }
  109. pf(" QUIT\n 221\n");
  110. }
  111. }
  112. }

例题5-12 城市正视图(Urban Elevations, ACM/ICPC World Finals 1992, UVa221)

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define INF 10000
  25. #define MAXN 5010
  26. #define MAX(a,b) a>b?a:b
  27. #define blank pf("\n")
  28. #define LL long long
  29. #define ALL(x) x.begin(),x.end()
  30. #define INS(x) inserter(x,x.begin())
  31. #define pqueue priority_queue
  32.  
  33. int n;
  34. double s[*];
  35.  
  36. struct building
  37. {
  38. int id;
  39. double x,y,w,h,d;
  40. bool operator <(const building& a) const
  41. {
  42. return x<a.x || (x==a.x && y<a.y);
  43. }
  44. //一定要是小于号,不然会报错
  45. }b[];
  46.  
  47. bool cover(int i,double mx)
  48. {
  49. return b[i].x<=mx && b[i].x+b[i].w>=mx;
  50. }
  51.  
  52. bool visible(int i,double mx)
  53. {
  54. if(!cover(i,mx)) return false;
  55. for(int k = ;k<n;k++)
  56. {
  57. if(cover(k,mx) && b[k].y<b[i].y && b[k].h>=b[i].h)
  58. return false;
  59. }
  60. return true;
  61. }
  62.  
  63. int main()
  64. {
  65. int kase = ;
  66. while(sf("%d",&n)== && n)
  67. {
  68. for(int i = ;i<n;i++)
  69. {
  70. sf("%lf%lf%lf%lf%lf",&b[i].x,&b[i].y,&b[i].w,&b[i].d,&b[i].h);
  71. s[i*]=b[i].x;
  72. s[i*+]=b[i].x+b[i].w;
  73. b[i].id=i+;
  74. }
  75. sort(b,b+n);
  76. sort(s,s+n*);
  77. int m = unique(s,s+n*)-s;
  78.  
  79. if(kase++) blank;
  80. pf("For map #%d, the visible buildings are numbered as follows:\n%d",kase,b[].id);
  81.  
  82. for(int i=;i<n;i++)
  83. {
  84. bool vis = false;
  85. for(int j = ;j<m-;j++)
  86. if(visible(i,(s[j]+s[j+])/)){vis=true;break;}
  87. if(vis){pf(" %d",b[i].id);};
  88. }
  89. blank;
  90.  
  91. }
  92. }

紫书第5章 C++STL的更多相关文章

  1. 紫书第五章训练2 F - Compound Words

    F - Compound Words You are to find all the two-word compound words in a dictionary. A two-word compo ...

  2. 紫书第三章训练1 D - Crossword Answers

    A crossword puzzle consists of a rectangular grid of black and white squares and two lists of defini ...

  3. 紫书第三章训练1 E - DNA Consensus String

    DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It consists of ...

  4. 紫书第五章训练3 D - Throwing cards away I

    D - Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top ...

  5. 【紫书】(UVa12096) The SetStack Computer

    突然转进到第五章的low题目的原因是做到图论了(紫书),然后惊喜的发现第一题就做不出来.那么里面用到了这一题的思想,我们就先解决这题.当然,dp必须继续做下去,这是基本功.断不得. 题意分析 这条题真 ...

  6. UVa 1339,紫书P73,词频

    题目链接:https://uva.onlinejudge.org/external/13/1339.pdf 紫书P73 解题报告: #include <stdio.h> #include ...

  7. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数

    整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...

  8. 学习GT一书前九章的体会

    学习Gilbarg和Trudinger一书前九章的体会 本书第二章,调和函数的基本性质进行展示.特别的对比较定理有深刻的阐述以及Perron方法的基本说明,并对Wiener准则作了简要说明. 第三章的 ...

  9. 【紫书】【重要】Abbott's Revenge UVA - 816 bfs 复杂模拟 带方向参数的迷宫

    题意:一个迷宫,每个交叉路口有一路标,限制了你从某方向进入该路口所能进入的路口. 题解:1.对于方向的处理:将node多增加一维dir,通过一个const 字符数组 加 上dir_id函数 以及一个方 ...

随机推荐

  1. JAVA JVM 杂谈(一)

    JVM能够跨计算机体系结构来执行Java字节码,主要是由于JVM屏蔽了与各个计算机平台先关的软件或者硬件之间的差异,使得与平台先关的耦合统一由JVM的提供者来实现. JVM结构组成: 1.类加载器:在 ...

  2. todocmvc的安装

    安装依赖 官网 安装依赖的css,js $npm install 引入vue <script src="js/vue.js"></script> 定义初始化 ...

  3. mysql基本用法

    mysql的基本用法     一.创建数据库 create database day02 default character set utf8; -- 创建表 create table user( i ...

  4. 限制USB延迟启动

    阻止用户从未经授权的位置安装设备驱动程序. 组策略 ...too long too see directly. what determins when a drivers i s  load. spe ...

  5. 决策树C4.5算法——计算步骤示例

    使用决策树算法手动计算GOLF数据集 步骤: 1.通过信息增益率筛选分支. (1)共有4个自变量,分别计算每一个自变量的信息增益率. 首先计算outlook的信息增益.outlook的信息增益Gain ...

  6. Java_方法的基本语法格式

    [修饰符] 返回值类型 方法名称([参数列表]){ 方法体 } [ ]中的内容是可有可无的 暂时将方法的修饰符编写为 public static 返回值类型有两种情况 : 第一种:无返回值类型,也就是 ...

  7. 爬虫--XPATH解析

    今天说一下关于爬取数据解析的方式---->XPATH,XPATH是解析方式中最重要的一种方式 1.安装:pip install lxml  2.原理 1. 获取页面源码数据 2.实例化一个etr ...

  8. [转]C#算法题

    1:不允许使用循环语句.条件语句,在控制台中打印出1-200这200个数. 参考答案:这里我使用的是递归. static void Main(string[] args) { Print(); Con ...

  9. 遇到Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider

    今天在做spring和hibernate整合的时候遇到这个问题 网上搜找到这里有解决办法 http://blog.csdn.net/jueshengtianya/article/details/122 ...

  10. 【LESS系列】简介和使用

    LESS —— 一个CSS预编译框架,它在CSS的语法基础之上,引入了变量.Mixin(混入).运算以及函数等功能,大大简化了CSS的编写,并且降低了CSS的维护成本,就像它的名称所说的那样,LESS ...