zoukankan      html  css  js  c++  java
  • Codeforces Round #516 (by Moscow Team Olympiad)

    1064A - Make a triangle!

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int a[3];
    int main(){
        for(int i=0;i<3;++i)scanf("%d",&a[i]);
        sort(a,a+3);
        printf("%d",max(0,a[2]+1-a[1]-a[0]));
        return 0;
    }

    1064B - Уравнения математической магии

    #include<cstdio>
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int a,ans=1;
            scanf("%d",&a);
            for(;a;a>>=1)
                if(a&1) ans<<=1;
            printf("%d
    ",ans); 
        }
        return 0;
    }

    1063A - Ох уж эти палиндромы

    这个题真的是绝了

     仔细思考一下,我们把一个字符串,无论怎样放置都不会比把所有相同的放在一起得到的回文串更多,为什么呢?因为我思考把aa 这两个字符如果放在一起,贡献为2+1;如果把它插入其他的回文串的对称位置,那么增加的贡献出了单个字符a外,也只是增加了一个。当我们有k个字符a时无论怎样放到其他字符串里也只是附带着别的字符串形成回文串。

    #include<cstdio>
    #include<algorithm>
    using namespace std; 
    char s[100005];
    int main(){
        int n;
        scanf("%d%s",&n,&s);
        sort(s,s+n);
        printf("%s",s); 
        return 0;
    }

    1063B - Лабиринт

    我们设起点为a,b

    终点为c,d

    设起点到终点向左走的步数和向右的步数为l,r

    b+r-l=d

    所以也就是说只要l确定,r也就确定

    并且l越小,r也越小

    所以我们在bfs只要标记出每个点l的最小值,同时也就能算出r的最小值了

    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std; 
    const int N=2005;
    struct A{
        int x,y;
    };
    queue<A>q;
    char s[N][N];
    int ls[N][N],bx[4]={1,-1},by[4]={0,0,1,-1};
    int rd(){
        char c;
        while((c=getchar())<'0'||c>'9');
        int re=c-'0';
        while((c=getchar())>='0'&&c<='9') re=(re<<1)+(re<<3)+c-'0';
        return re; 
    }
    int main(){
        int n=rd(),m=rd(),r=rd(),c=rd(),zb=rd(),yb=rd(),ans=0;
        for(int i=1;i<=n;++i) scanf("%s",s[i]+1);
        memset(ls,0x3f,sizeof(ls));
        q.push((A){r,c});ls[r][c]=0;
        for(;q.size();q.pop()){
            A t=q.front();
            for(int i=0;i<4;++i){
                int x=t.x+bx[i],y=t.y+by[i],tt=ls[t.x][t.y];
                if(i==3) ++tt;
                if(s[x][y]=='.'&&ls[x][y]>tt) ls[x][y]=tt,q.push((A){x,y});
            }
        }
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                if(ls[i][j]<=zb&&j-c+ls[i][j]<=yb) ++ans;
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    [转]jQuery知识总结
    sqlserver2008 函数1
    使用触发器生成流水号
    日期格式
    数据库正在使用,删除不了的问题
    continue 语句
    逻辑语句和函数
    ASP.NET中的随机密码生成
    相对路径
    “基类包括字段,但其类型与控件的类型不兼容”的解决方法
  • 原文地址:https://www.cnblogs.com/bzmd/p/9946088.html
Copyright © 2011-2022 走看看