• 589


    A:hash一下,然后判断是否相等即可

    #include<map>
    #include<set>
    #include<iostream>
    #include<vector>
    #include<cstdio>
    using namespace std;
    typedef long long ll;
    const string S="bmail.com";
    string s;
    set<ll> used;
    map<ll,vector<string> > mp1;
    map<ll,ll> mp;
    int n;
    ll Hash(bool f,string s)
    {
        ll x=0;
        bool flag=false;
        for(int i=0;i<s.length();i++)
        {        
            if(s[i]=='+'&&f) flag=true;
            if(s[i]=='@'&&f) 
            {
                flag=false;
                f=false;
            }
            if(flag||(s[i]=='.'&&f)) continue;
            x*=1071;
             x+=(int)(s[i]);
        }
    //    cout<<x<<endl;
        return x;
    }
    void go(string s)
    {
        bool flag=true;
        int pos;
        for(int i=0;i<s.length();i++)
        {
            if(s[i]=='@')
            {
                pos=i;break;
            }
        }
        string temp_s=s;
        for(int i=0;i<s.length();i++)
        {
            if(s[i]>='A'&&s[i]<='Z')
                s[i]=(char)(s[i]+('a'-'A'));
        }
        for(int i=pos+1;i<s.length();i++)
        {
            if(i-pos>S.length()||s[i]!=S[i-pos-1]) 
            {
                flag=false;
                break;
            }
        }
    //    cout<<flag<<endl;
    //    cout<<s<<endl;
        ll temp=Hash(flag,s);
        mp1[temp].push_back(temp_s);
        mp[temp]++;
    }
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            cin >> s;
            go(s);
        }
        printf("%d
    ",mp1.size());
        for(map<ll,vector<string> >::iterator it=mp1.begin();it!=mp1.end();it++)
        {
            cout<<mp[it->first];
            for(int i=0;i<mp1[it->first].size();i++)
            {
                cout<<" "<<mp1[it->first][i];
            }
            cout<<endl;
        }
        return 0;
    }

    F:二分答案,然后枚举每一秒,注意,贪心时应以结束时间作为标准,否则就会错掉,坑了很长时间

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    using namespace std;
    typedef pair<int,int> pii;
    typedef pair<int,pair<int,int> > piii;
    struct data
    {
        int a,b,l;
    }x[110];
    struct type
    {
        int len,l,r;
    };
    int n,len;
    priority_queue<piii,vector<piii>,greater<piii> > q;
    inline bool cp(data x,data y)
    {
        if(x.a!=y.a) return x.a<y.a;
        return x.b<y.b;
    }
    inline int Max(int x,int y)
    {
        return x>y?x:y;
    }
    bool C(int l)
    {
        int pos=1;
        for(int i=0;i<=len+1;i++)
        {
            while(x[pos].a==i-1)
            {
                piii temp;
                temp.first=x[pos].b;
                temp.second.first=l;
                temp.second.second=x[pos].b;
                q.push(temp);pos++;
            }
            if(q.empty()) continue;
            piii temp=q.top();q.pop();
            if(i<=temp.second.second)
            {
                temp.second.first--;
                if(temp.second.first!=0) q.push(temp);
            } else return false;
        }
        return q.empty();
    }
    int main()
    {
        scanf("%d",&n);
        memset(x,-2,sizeof(x));
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&x[i].a,&x[i].b);
            x[i].l=x[i].b-x[i].a;
            len=Max(len,x[i].b);
        }
        sort(x+1,x+n+1,cp);
        int l=0,r=10000,mid,ans=0;
        while(l<r-1)
        {
            mid=(l+r)/2;
            while(!q.empty()) q.pop();
            if(C(mid)) 
            {
                l=mid;
                ans=mid;
            }
            else r=mid;
        }
        if(C(ans+1)) ans++;
        if(C(ans+1)) ans++;
        printf("%d
    ",ans*n);
        return 0;
    }
  • 相关阅读:
    小涛涛的计算器
    Sort排序浅聊
    程序员PC选购
    冒泡排序
    Django之模板
    Django中model的Meta选项
    Django之路由系统
    Django之视图系统
    踏上Flask的不归路(二)
    踏上Flask的不归路(一)
  • 原文地址:https://www.cnblogs.com/19992147orz/p/6054387.html
Copyright © 2020-2023  润新知