比赛心得:我们小队总共就做了3个题,1010因为多加了一个break;然后一直多输出一个数,卡了很久,浪费了不少时间。1007一开始一直读不懂题,给的那些式子也不知道有什么用,然后根据通过率那么高,和输入与输出分析出这一个字符串中最多的字母有多少个,不过在试的时候还是卡了会,一开始就想到用stl的map的使用利用map<char,int>mp;把每一个字符存进去,然后输出最后的(*it).second,然后以为这样就行的时候,又没注意到迭代器最后一个的second不一定是最大的,而是根据first排序的,就开始换成普通的方法做,最后2种方法都做了,不过浪费了队友好多时间,队友把这题交给了我却卡了半天。1003是队友做出来的。还看了1002,队友说是最小生成树,这个算法一直想着学,然后一直没有去,这题就卡在最后一个点没出来,数据太大了。1011跟着另外一个队员在看,然后我也看了下题目,看不懂就没做了。其他题没怎么认真看。。。
总结:1,最近练题太少了,STL模板都忘记了好多,以前靠STL做出了好多题,现在能想起来方法却有时候会卡顿下,浪费了时间,应该继续保持STL的学习。
2,cf题还是一直只做div3的 1,2题,一直没有提升,应该要尝试做div 2的题,做到3题。
3,还是要好好练 组队赛发现都一直只能ac在2-3题,跟队友配合的也不好了,不太清楚他们熟悉那些类型的题,应该好好的跟队友讨论下。
4,之前在洛古学过的好多算法都忘记光了,应该重新复习,并学习新算法。
1001就是看相邻的数字会不会相等。
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta #include<bits/stdc++.h> using namespace std; int main(){ int t; cin>>t; while(t--){ int n; cin>>n; int flag=1; int ans; int a[10001]; memset(a,0,sizeof(0)); for(int i=0;i<n;i++){ cin>>a[i]; if(i==0){ ans=a[i]; } if(ans==a[i]&&i>0){ flag=0; } else{ ans=a[i]; } } if(flag==1){ cout<<"YES"<<endl; } else{ cout<<"NO"<<endl; } } return 0; }
1007就是找出最多字母
//第一种用stl 先存map然后再vector排序 第二种就是普通方法 #include<bits/stdc++.h> #include<map> #include<vector> using namespace std; bool cmp(int p,int q){ return p>q; } int main(){ int t; int g=1; cin>>t; while(t--){ map<char,int>mp; map<char,int>::iterator it; vector<int>v; string p; cin>>p; for(int i=0;i<p.size();i++){ mp[p[i]]++; } for(it=mp.begin();it!=mp.end();it++){ v.push_back((*it).second); } sort(v.begin(),v.end(),cmp); cout<<"Case #"<<g<<": "<<v[0]<<endl; g++; } } /* #include<bits/stdc++.h> #define ll long long using namespace std; int t; int main() { ios::sync_with_stdio(false); cin >> t; for(int k = 1; k <= t; k++) { string s; cin >> s; int a[100001] = {0}; for(int i = 0; i < s.size(); i++) { a[(int)s[i]]++; } int mx = 0; for(int i = 96; i <= 96 + 26; i++) { mx = max(mx, a[i]); } cout << "Case #" << k << ": " << mx << endl; } return 0; } */
1003主要取小于k的值,如果没有的话就把abs(a[i] - k) * 2的值累加起来。
#include<bits/stdc++.h> using namespace std; #define ll long long ll a[1000000+8]; int main() { int t,i,j,m; ll n,k; cin>>t; while(t--) { ll dis=0; scanf("%lld%d%lld",&n,&m,&k); for(i=0;i<m;i++) { scanf("%lld",&a[i]); } sort(a,a+m); dis=k-1; for(i=m-1;i>=1;i--) { if(a[i]>k) { dis+=a[i]-k; dis+=a[i]-k; } else { dis+=k-a[i]; dis+=k-a[i]; } } if(a[0]<k) { dis+=k-1; } else { dis+=a[0]-k; dis+=a[0]-1; } printf("%lld ",dis); } return 0; }