ccpc总结


比赛心得:我们小队总共就做了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;
}
原文地址:https://www.cnblogs.com/liyongqi/p/13735704.html