#include<bits/stdc++.h> using namespace std; const int N = 1000010; int main() { char str[N]; int cnt[N]; int ind[N]; int n,m; scanf("%d %d",&n,&m); scanf("%s",str+1); for(int i = 1 ; i <= n ;i++){ cnt[str[i] - 'a']++; ind[i] =cnt[str[i] - 'a']; } int x; while(m--) { scanf("%d",&x); printf("%d\n",ind[x]); } return 0; }
[NOIP2017]图书管理员 (nowcoder.com)
排序——寻找min,如果找到了,立即break
#include<bits/stdc++.h> using namespace std; int main() { long long n,q; cin>>n>>q; long long a[n+1]; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+1+n);//排序!!! for(int i=1;i<=q;i++) { long long len,x; cin>>len>>x; long long y=pow(10,len);//妙!!! for(int j=1;j<=n;j++) { if(a[j]%y==x) { cout<<a[j]<<endl; break; } if(j==n) cout<<-1<<endl; } } return 0; }
或者
#include<bits/stdc++.h> using namespace std; int main() { int n,q,len; vector<string> ve; vector<int> nt; string s; cin>>n>>q; while(n--) { cin>>len; nt.push_back(len); } sort(nt.begin(),nt.end());//排序!!! for(auto i:nt)//遍历nt容器 { ve.push_back(to_string(i));//to_string 把i变成字符串 } while(q--) { cin>>len>>s; int flag=0; for(auto i:ve) { int x=i.size()-len; if(x<0) { continue; } if(i.substr(x,len)==s)//截取字符串 { flag=1; s=i; break; } } if(flag) { cout<<s<<endl; } else { cout<<"-1"<<endl; } } }
[NOIP2007]纪念品分组 (nowcoder.com)
#include <iostream> #include<algorithm> using namespace std; int n,w; const int N=10010; int p[N]; int main() { cin>>w>>n; for(int i=0 ;i < n;i ++ ) cin>>p[i]; sort(p,p+n);//注意已经排过序了 int res =0; int l=0; for(int i=n-1;i >= l;i -- ) { if(p[i] + p[l] <= w ) l ++; res ++ ; } cout<<res<<endl; return 0; }
🍔🍔🍔string类型的按ASCII比较大小
#include <iostream> #include <string> #include <algorithm> using namespace std; bool cmp (string a, string b) { return a + b > b + a; } int main() { string s[21]; int n; cin >> n; for(int i = 1; i <= n; i ++ ){ cin >> s[i]; } sort(s + 1, s + 1 + n, cmp); for(int i = 1; i <= n; i ++ ){ cout << s[i]; } }
如果Sl!=Sl+i,继续进行
一旦Sl=Sl+1,立刻截至,即使后面有Sl!=Sl+i也不能进行
#include <stdio.h> int main(void) { int n; char s[5000]; scanf("%d", &n); scanf("%s", s); for (int i = 1; i < n; i++) { int l = 0;//关键点 while (l + i != n && s[l] != s[l+i]) { l++; } printf("%d\n", l); } return 0; }