zoukankan      html  css  js  c++  java
  • CodeForces 680A&680B&680C&680D Round#356

    昨天晚上实在是=_=困。。。(浪了一天)就没有去打Codeforces
    中午醒来看看题,还不太难。
    A题:模拟(水题 3minAC)

    // by Sirius_Ren
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int a[6],sum=0,ans;
    bool cmp(int a,int b){return a>b;}
    int main()
    {
        for(int i=1;i<=5;i++)scanf("%d",&a[i]),sum+=a[i];
        ans=sum;
        sort(a+1,a+6,cmp);
        for(int i=1;i<=5;i++)
            for(int j=1;j<=2;j++){
                if(a[i]!=a[i+j])break;
                ans=min(ans,sum-a[i]-a[i]);
                if(j==2)ans=min(ans,sum-a[i]-a[i]-a[i]);
            }
        printf("%d",ans);
    }

    这里写图片描述
    B:(水题 5minAC)

    // by Sirius_Ren
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,a,ans=0;
    bool v[105];
    int main(){
        scanf("%d%d",&n,&a);
        for(int i=1;i<=n;i++)scanf("%d",&v[i]);
        for(int i=0;i<=n;i++){
            if(a-i>0&&a+i<=n&&v[a-i]&&v[a+i]&&i)ans+=2;
            else if(a-i>0&&a+i<=n&&v[a-i]&&v[a+i]&&!i)ans++;
            else if(a-i<=0&&a+i<=n&&v[a+i])ans++;
            else if(a-i>0&&a+i>n&&v[a-i])ans++;
        }
        printf("%d",ans);
    }

    这里写图片描述
    C:一道数学题。
    枚举50以内的素数,最后判断有没有i*i(i^2<50)的即可。
    一个yes—>素数
    否则—->合数

    // by Sirius_Ren
    #include <cstdio>
    #include <iostream>
    using namespace std;
    int a[20]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,4,8,9,25,49},ans=0;
    char s[20][5];
    int main()
    {
        for(int i=0;i<20;i++){printf("%d
    ",a[i]);fflush(stdout);scanf("%s",s[i]);}
        for(int i=0;i<20;i++)if(s[i][0]=='y')ans++;
        if(ans>=2)printf("composite
    ");
        else printf("prime
    ");
    }

    (呃其实没有“8”,当时多打了一个,不过也没关系,AC就是王道)
    这里写图片描述
    D:
    http://www.cnblogs.com/macinchang/p/5572070.html
    照着他的题解写得。 没有什么思路。。。。
    这里写图片描述

    // by Sirius_Ren
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    long long a;
    long long p(long long x){return x*x*x;}
    pair<int,long long>b;
    void w(long long x,int y,long long z){
        if(!x){b=max(b,make_pair(y,z));return;}
        long long t=1;
        while(p(t+1)<=x)++t;
        w(x-p(t),y+1,z+p(t));
        if(x)w(p(t)-1-p(t-1),y+1,z+p(t-1));
    }
    int main(){
        scanf("%I64d",&a),w(a,0,0);
        printf("%d %I64d",b.first,b.second);
    }

    这里写图片描述
    E:第10个点WA了,并不知道怎么改。 大数据挂了。。。

    // by Sirius_Ren
    #include <set>
    #include <queue>
    #include <cstdio>
    #include <algorithm>
    #define ff(aa,bb,cc,dd) for(int i=aa;i<=bb;i++)for(int j=cc;j<=dd;j++)
    #define f(aa,bb) for(int i=aa;i<=bb;i++)
    using namespace std;
    set<int>s;
    queue<int>que;
    set<int>::iterator it;
    int n,k,tot=0,jy,vis[501][501],v[500000],q[500000],ans=0,Q=0;
    char xx[]={1,-1,0,0},yy[]={0,0,1,-1},a[501][501];
    void Dfs(int x,int y){
        jy++,vis[x][y]=tot;
        f(0,3)if(!vis[x+xx[i]][y+yy[i]]&&a[x+xx[i]][y+yy[i]]=='.')Dfs(x+xx[i],y+yy[i]);
    }
    void dfs(int x,int y)
    {
        while(!que.empty())s.erase(que.front()),que.pop();
        for(int i=0;i<k;i++)
            if(vis[x+i][y-1])
            {
                q[vis[x+i][y-1]]--;
                if(!q[vis[x+i][y-1]])s.erase(vis[x+i][y-1]);
            }
            else if(a[x+i][y-1]=='X')jy--;
        for(int i=0;i<k;i++)
            if(vis[x+i][y+k-1])
            {
                if(!q[vis[x+i][y+k-1]])s.insert(vis[x+i][y+k-1]);
                q[vis[x+i][y+k-1]]++;
            }
            else if(a[x+i][y+k-1]=='X')jy++;
        for(int i=0;i<k;i++)if(vis[x-1][y+i]&&s.find(vis[x-1][y+i])==s.end())s.insert(vis[x-1][y+i]),que.push(vis[x-1][y+i]);
        for(int i=0;i<k;i++)if(vis[x+k][y+i]&&s.find(vis[x+k][y+i])==s.end())s.insert(vis[x+k][y+i]),que.push(vis[x+k][y+i]);
        for(int i=0;i<k;i++)if(vis[x+i][y-1]&&s.find(vis[x+i][y-1])==s.end())s.insert(vis[x+i][y-1]),que.push(vis[x+i][y-1]);
        for(int i=0;i<k;i++)if(vis[x+i][y+k]&&s.find(vis[x+i][y+k])==s.end())s.insert(vis[x+i][y+k]),que.push(vis[x+i][y+k]);
        int temp=jy;
        for(it=s.begin();it!=s.end();it++)temp+=v[*it];
        ans=max(ans,temp);
        if(y+k<=n)dfs(x,y+1);
        for(int i=0;i<k;i++)
            if(vis[x+i][y-1])
            {
                if(!q[vis[x][i-1]])s.insert(vis[x][i-1]);
                q[vis[x][i-1]]++;
            }
            else if(a[x+i][y-1]=='X')jy++;
        for(int i=0;i<k;i++)
            if(vis[x+i][y+k-1])
            {
                q[vis[x+i][y+k-1]]--;
                if(!q[vis[x+i][y+k-1]])s.erase(vis[x+i][y+k-1]);
            }
            else if(a[x+i][y+k-1]=='X')jy--;
        if(x+k<=n&&y==1)
        {
            for(int i=1;i<k;i++)
            {
                if(vis[x][i])
                {
                    q[vis[x][i]]--;
                    if(!q[vis[x][i]])s.erase(vis[x][i]);
                }
                else if(a[x][i]=='X')jy--;
            }
            for(int i=1;i<k;i++)
            {
                if(vis[x+k][i])
                {
                    q[vis[x+k][i]]++;
                }
                else if(a[x+k][i]=='X')jy++;
            }
            dfs(x+1,1);
        }
    }
    int main(){
        scanf("%d%d",&n,&k);
        ff(1,n,0,n)scanf("%c",&a[i][j]);
        ff(1,n,1,n)if(!vis[i][j]&&a[i][j]=='.')jy=0,tot++,Dfs(i,j),v[tot]=jy;
        jy=0;
        ff(1,k,1,k-1)
            if(a[i][j]=='X')jy++;
            else{
                if(!q[vis[i][j]])s.insert(vis[i][j]);
                q[vis[i][j]]++;
            }
        dfs(1,1);
        printf("%d",ans);
    }

    这里写图片描述
    E题已挂。

  • 相关阅读:
    我非要捅穿这 Neutron(三)架构分析与代码实现篇(基于 OpenStack Rocky)
    我非要捅穿这 Neutron(二)上层资源模型篇
    $('.one + div')选取class为one的下一个元素
    15分钟,教你用Python爬网站数据,并用BI可视化分析!
    $("div span")选取里的所有的元素
    根据给定的元素名匹配元素
    根据给定的类名匹配元素
    根据给定的id匹配一个元素
    想创业,请问有没有投资小的项目?
    Vue组件间的通信
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532443.html
Copyright © 2011-2022 走看看