Codeforces Round #368 (Div. 2)

直达–>Codeforces Round #368 (Div. 2)

A Brain’s Photos

给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输出”#Color”,如果只有”G”,”B”,”W”就输出”#Black&White”。

#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 200;
const int INF = 0x3f3f3f;
char P[maxn][maxn];
int m,n;
int flag;
int main()
{
    scanf("%d%d",&n,&m);
    flag = 0;
    getchar();
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%c",&P[i][j]);
            getchar(); //注意字符串的输入
            if(P[i][j]=='C'||P[i][j]=='M'||P[i][j]=='Y')//莫名其妙忽略了灰色。醉醉哒
                flag = 1;
        }
    }
    if(flag) printf("#Color\n");
    else printf("#Black&White\n");
    return 0;
}

B Bakery

我以为是固定起点最短路,终点是仓库任意一个求最短,题目英文长的可怕,结果才发现弄错了,是求任意一个城市仓库到普通城市的最短路径。用vis数组存仓库的标号,判定是否有城市仓库和普通城市连通选最短。

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 100000+5;
const int INF = 0x3f3f3f3f;
int s[maxn];
int n,m,k;
int nn[maxn],mm[maxn];
int kk[maxn];
int main()
{
    int ans = INF;
    scanf("%d%d%d",&n,&m,&k);
    int a,b,c;
    for(int i=0;i<m;i++){
        scanf("%d%d%d",&a,&b,&c);
        nn[i] = a;
        mm[i] = b;
        s[i] = c;
    }
    if(k==0||k==n){
        printf("-1\n");
        return 0;
    }
    for(int i=0;i<k;i++){
        scanf("%d",&a);
        kk[a] = 1;
    }
    for(int i=0;i<m;i++){
        if((!kk[nn[i]]&&kk[mm[i]])||(!kk[mm[i]]&&kk[nn[i]])){
            //printf("%d %d %d\n",i,nn[i],mm[i]);
            ans = min(ans,s[i]);
        }
    }
    if(ans==INF) printf("-1\n");
    else printf("%d\n",ans);
    return 0;
}

C Pythagorean Triples

给你一个直角三角形的某一个边长,求出直角三角形其他两个边的边长。这题网上找的规律:(然后注意下数据大小就OK了)

当a为大于1的奇数2n+1b=2n2+2n,c=2n2+2n+1

当a为大于4的偶数2nb=n21,c=n2+1

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
long long n,m,k;
int main()
{
    scanf("%I64d",&n);
    if(n<=2) printf("-1\n");
    else{
        if(n&1){
            n = (n-1)/2;
            printf("%I64d %I64d\n",2*n*n+2*n,2*n*n+2*n+1);
        }
        else{
            n = n/2;
            printf("%I64d %I64d\n",n*n-1,n*n+1);
        }
    }
    return 0;
}
posted @ 2016-08-21 15:37  霜降sma  阅读(130)  评论(0编辑  收藏  举报