zoukankan      html  css  js  c++  java
  • 考试---订错2--2

    我用了纯模拟,数组不但爆了而且因为没有及时优化n2 只得了十分

    别人的三十分代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,ans,mid,flag,maxx,ru[15000000],chu[15000000];
    int main()
    {
        freopen("gift.in","r",stdin);
        freopen("gift.out","w",stdout);
        cin>>n;
        for(int i=1;i<=n;i++)
        {    
            int a,b;
            cin>>a>>b;
            ru[a]++;
            maxx=max(max(a,b),maxx);//减少了之后找的量
            if(a!=b)
                chu[b]++;
        }
        if(n&1)
            mid=n/2+1;
        else
            mid=n/2;
        for(int i=1;i<=maxx;i++)
            if(ru[i]>=mid)
            {
                cout<<"0";
                return 0;
            }//先找一遍是否已经能够满足
        for(int i=1;i<=maxx;i++)
        {
            if((ru[i]+chu[i])>=mid)
            {    
                    ans=mid-ru[i];
                    flag=1;
                    break;
            }
        }
        if(!flag)
            cout<<"-1";
        else 
            cout<<ans;
        return 0;
    }

    我的10分代码

    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    const int MAXN=1000001;
    int n;
    int col[MAXN][2]={0};
    int require;
    int minn=0x7f;
    int main()
    {
        int i,j,k,a,b;
        freopen("gift.in","r",stdin);
        freopen("gift.out","w",stdout);
        cin>>n;
        if(n%2==0) require=n/2;
             else require=(n+1)/2;
        for(i=1;i<=n;i++)
        {
          cin>>a>>b;
          col[a][1]=col[a][1]+1;
          col[b][2]=col[b][2]+1;
        }
        for(i=1;i<=n;i++)
        {
            k=require-col[i][1];
            if((k<=col[i][2])&&k<minn) minn=k;
        }
        if(minn<0x7f-1) {cout<<minn<<endl;}
        else cout<<"-1"<<endl;
        return 0;
    }

    大佬的100分代码-------map

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int n,m,cnt;//cnt---颜色种数
    ll zheng[200009],fan[200009],ans=99999999999;
    map<ll,int>mapp;
    int main()
    {
        freopen("gift.in","r",stdin);
        freopen("gift.out","w",stdout);
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            ll c1,c2;
            scanf("%lld%lld",&c1,&c2);
            if(!mapp[c1]){//该种颜色数没有   mapp存该色映射的张数
                zheng[++cnt]++;//颜色种类数++,正面有该色的张数++
                mapp[c1]=cnt;//有该色数的是第几种
            }
            else {
                zheng[mapp[c1]]++;
            }
            if(c1==c2)continue;
            if(!mapp[c2]){
                fan[++cnt]++;
                mapp[c2]=cnt;
            }
            else{
                fan[mapp[c2]]++;
            }
        }
        int mid=(n+1)/2;
        for(int i=1;i<=cnt;i++)
        {
            if(zheng[i]>=mid){
                cout<<"0"<<endl;
                return 0;
            }
            else if(zheng[i]+fan[i]>=mid){
                ans=min(ans,mid-zheng[i]);
            }
        }
        if(ans<99999999999)
        cout<<ans<<endl;
        else cout<<"-1"<<endl;
        return 0;
    }

     之后又偷懒订正的代码 --80

    !!!若x==y

    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<stdio.h>
    #include<algorithm>
    #include<map>
    using namespace std;
    const int MAXN=1000001;
    map<long long,int>mapp; 
    int n,cnt=0,ans=0x7f;
    int mid;
    int zheng[MAXN],fan[MAXN];
    int main()
    {
        int i,j,x,y;
        cin>>n;
        mid=(n+1)/2;
        for(i=1;i<=n;i++)
        {
           cin>>x>>y;
           if(mapp[x]==0){
                zheng[++cnt]++;
                mapp[x]=cnt;    
           }    
           else {
                zheng[mapp[x]]++;        
                }
           if(mapp[y]==0){
                fan[++cnt]++;
                mapp[y]=cnt;    
           }    
           else {
                fan[mapp[x]]++;        
                } 
        }
        for(i=1;i<=cnt;i++)
           {
                if(zheng[i]>=mid) {cout<<"0"<<endl; return 0;}
                else if(zheng[i]+fan[i]>=mid)
                {
                    ans=min(ans,mid-zheng[i]);
                }
           }
        if(ans<0x7f-1) cout<<ans<<endl;
        else cout<<"-1"<<endl;
        
        return 0;
    }
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/voldemorte/p/7412168.html
Copyright © 2011-2022 走看看