主要是熟悉一下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); } } }
主要是熟悉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(); }
主要是熟悉set的insert还有iterator
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> #include <stack> #include <cctype> #include <vector> #include <set> #include <sstream> 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 set<string> dict; int main() { string s,buf; while(cin>>s) { int i; for(i=0;i<s.length();i++) { if(isalpha(s[i])) s[i] = tolower(s[i]); else s[i] = ' '; } stringstream ss(s); while(ss>>buf) dict.insert(buf); } for(set<string>::iterator it = dict.begin();it!=dict.end();++it) cout<<*it<<endl; }
主要是熟悉map的用法。
给string和vector<string>排序可以用sort(str.begin(),str.end());即字典序
map<string,int> mp可以直接用mp[string] = int;在这道题可以表示某个字符串出现的次数
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> #include <stack> #include <cctype> #include <vector> #include <set> #include <map> #include <sstream> 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 map<string,int> cnt; vector<string> words; string repr(const string &s) { string ans = s; for(int i=0;i<ans.length();i++) { ans[i] = tolower(ans[i]); } sort(ans.begin(),ans.end()); return ans; } int main() { string s; while(cin>>s) { if(s[0]=='#') break; words.pb(s); string r = repr(s); if(!cnt.count(r)) cnt[r] = 0; cnt[r]++; } vector<string> ans; for(int i = 0;i<words.size();i++) { if(cnt[repr(words[i])]==1) ans.pb(words[i]); } sort(ans.begin(),ans.end()); for(int i = 0;i<ans.size();i++) { cout<<ans[i]<<endl; } }