• Day4上午


    expect100+50+50,

    In fact 100+10+0.

    代码能力还有待提高,部分分应该能拿的。结果。。。力不从心啊。

    T1

    贪心做的不知对不对。

    看来思路是对的,不知道能不能对。

    暴力做超时,所以优化,计数排序。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    using namespace std;
    const int N=1e6+10;
    int n,maxn;
    int a[N];
    int L,R,mid;
    int check()
    {    
        int sum0=0,tot=0,i=1,ans=0;
        while(!a[i])    sum0++,i++;
        for(i;i<=n;i++)
        {        
            ans=a[i];tot=a[i]-a[i-1];
            for(int j=1;j<=tot;j++)
                sum0=(sum0%2+(sum0)/2);
            sum0++;
        }
        ans=ans+(sum0%2+log2(sum0));
        return ans;
    }
    int main()
    {
        freopen("multiset.in","r",stdin);
        freopen("multiset.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            maxn=max(maxn,a[i]);
        }
        sort(a+1,a+1+n);
        cout<<check();
        return 0;
    }
    first 100

    T2

    搜的

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    using namespace std;
    const int N=100009;
    int n,m;
    int h[N],nex[N*5],to[N*5],cnt;
    bool vis[N*3];
    int f[N],size[N];
    int ans=1;
    int find(int x)
    {
        while(x!=f[x])
            x=f[x]=f[f[x]];
        return x;
    }
    bool ok[N*5];
    bool dfs(int x,int last)
    {
        if(x==n) return ok[last]=1;    
        for(int i=h[x];i;i=nex[i])    
        {
            
            if(ok[last])
            {
                if(abs(last-i)==1)    ans++;
            }else
            {
                
                if(ok[last]=dfs(to[i],i))        
                    if(abs(last-i)==1)    ans++;
            
            }
            
        }
        return ok[last];
    }
    int main()
    {
        freopen("road.in","r",stdin);
        freopen("road.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1,v,u;i<=m;i++)
        {
            scanf("%d%d",&v,&u);
            to[++cnt]=u,nex[cnt]=h[v],h[v]=cnt;    
        }        
        for(int i=h[1];i;i=nex[i])
        dfs(to[i],i);
        cout<<ans<<endl;
        return 0;
    }
    first

     题解用的变态的二分,

    有人增量法。

    T3

    搜的

    最高分10分。。。。。。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    using namespace std;
    const int N=1020;
    int T,n,maxn;
    int  a[N],ans;
    void dfs(int x,int tot)
    {
        ans=max(ans,tot);
        if(x-1==maxn)        
                return ;    
        for(int i=1;i<=n;i++)
        if(a[i]>x-1)
        {
            a[i]--;
            if(a[i]==x)
            dfs(x+1,tot+1);
            else dfs(x+1,tot);
            a[i]++;
        }
        return ;
    }
    int main()
    {
        freopen("cs.in","r",stdin);
        freopen("cs.out","w",stdout);
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);ans=0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                maxn=max(maxn,a[i]);
            }
            
            dfs(1,0);
            printf("%d
    ",ans);
        }
        return 0;
    }
    first
  • 相关阅读:
    编程语言
    俄罗斯方块
    四则运算
    2019-2020-1 20191312《信息安全专业导论》第七周学习总结
    20191312-获奖感想与学习心得
    2019-2020-1学期 20192428 《网络空间安全专业导论》第九周小组讨论
    2019-2020-1学期 20192428 《网络空间安全专业导论》第九周学习总结
    2019-2020-1学期 20192428 第八周作业——小学四则运算实践
    2019-2020-1学期 20192428《网络空间安全专业导论》第八周学习总结
    2019-2020-1学期 20192428 《网络空间安全专业导论》第七周学习总结
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7760081.html
Copyright © 2020-2023  润新知