Codeforces Round #369 (Div. 2) A B 两水题 编码能力

原创 2016年08月30日 13:10:10

A题:




水。。直接代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
string save[1010];
int main(){
    int n,i,j;
    scanf("%d",&n);
    string t;
    int flag = false;
    for(i=1;i<=n;i++){
        cin>>save[i];
        if((save[i][0]=='O'&&save[i][1]=='O')||(save[i][3]=='O'&&save[i][4]=='O')){
            if(!flag){
                if(save[i][0]=='O'&&save[i][1]=='O'){
                    save[i][0]='+';
                    save[i][1]='+';
                }else{
                    save[i][3]='+';
                    save[i][4]='+';
                }
            }
            flag = true;
        }
    }
    if(flag){
        printf("YES\n");
        for(i=1;i<=n;i++){
            cout<<save[i]<<endl;
        }
    }else{
        printf("NO\n");
    }
    return 0;
}
B题:



题目给一个n*n的矩阵,其中某个位置的数为0,这事我们要填的位置,保证其它位置的数字都为正整数。我们填的数字也必须为正整数,填上数字后要求这个矩阵每一行、每一列、两条对角线的的和要想等,如果不存在这样的数字,就输出-1。

题意很明确。。。是自己的编码能力不足。。。

首先先检查除去含零的列和行还有对角线是否相等,如果不等则直接判-1.

然后随便找一行来对比含0行找出要填的数字,填上后再检查一遍这个矩阵是否合法

。。。。感觉自己好腊鸡啊。。什么时候div能稳做三题呢。。

下面代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=510;
const long long prime = 10000019;
int n,i,j;
long long save[maxn][maxn];
bool judge(){
    long long now=0,sum=0;
    bool flag = true;
    bool can=true;
    for(i=1;i<=n;i++){
        if(can){
            now = sum;
        }
        sum = 0;
        can = true;
        for(j=1;j<=n;j++){
            if(save[j][i]==0){
                can = false;
            }
            sum = (sum+save[j][i])%prime;
        }
        if(can){
            if(now!=sum&&now!=0){
                flag =false;
                return false;
            }
        }
    }
    return  true;
}
long long result(int i0){
    int it;
    if(i0>1){
        it=1;
    }else if(i0==n){
        it = 1;
    }else{
        it = n;
    }
    long long add=0;
    for(i=1;i<=n;i++){
        add += save[it][i]-save[i0][i];
    }
    return add;
}
int main(){
    scanf("%d",&n);
    int i0,j0;
    if(n==1){
        printf("1\n");
        return 0;
    }
    long long now=0,sum=0;
    bool flag = true;
    bool can=true;
    for(i=1;i<=n;i++){
        if(can){
            now = sum;
        }
        sum = 0;
        can = true;
        for(j=1;j<=n;j++){
            scanf("%I64d",&save[i][j]);
            if(save[i][j]==0){
                i0=i,j0=j;
                can = false;
            }
            sum = (sum+save[i][j])%prime;
        }
        if(can){
            if(now!=sum&&now!=0){
                flag =false;
            }
        }
    }
    if(flag){
        long long sum1 = 0;
        long long sum2 = 0;
        bool can=true;
        for(i=1;i<=n;i++){
            if(save[i][i]==0){
                can =false;
                break;
            }
            sum1 = (sum1+save[i][i])%prime;
        }
        for(i=1;i<=n;i++){
            if(save[i][n-i+1]==0){
                can =false;
                break;
            }
            sum2 = (sum2+save[i][n-i+1])%prime;
        }
        if(sum1!=sum2&&can){
            printf("-1\n");
        }else if(sum1!=now&&can){
            printf("-1\n");
        }else{
            if(judge()){
                if(result(i0)>0){
                    long long answer = result(i0);
                    save[i0][j0]=result(i0);
                    sum1=0,sum2=0;
                    for(i=1;i<=n;i++){
                        sum1 = (sum1+save[i][i])%prime;
                        sum2 = (sum2+save[i][n-i+1])%prime;
                    }
                    if(n==2){
                        if(sum1==sum2&&judge()){
                            if(answer>0){
                                printf("%I64d\n",answer);
                                return 0;
                            }else{
                                printf("-1\n");
                            }
                        }
                    }
                    if(sum1==sum2&&sum1==now&&judge()){
                        if(answer>0){
                            printf("%I64d\n",answer);
                        }else{
                            printf("-1\n");
                        }
                    }else{
                        printf("-1\n");
                    }
                }else{
                    printf("-1\n");
                }
            }else{
                printf("-1\n");
            }
        }
    }else{
        printf("-1\n");
    }
    return 0;
}


Codeforces Round #369 (Div. 2) B. Chris and Magic Square

B. Chris and Magic Square time limit per test 2 seconds memory limit per test 256 megaby...

Codeforces Round #369 (Div. 2) B. Chris and Magic Square【数学,模拟】

题意:输入一个n*n的矩阵,有一个位置为0,问你能否在0处填上一个正整数,使得该矩阵的每一行,每一列,主对角,副对角线上的和都相等,即构成一个幻方。 由于要构成一个幻方,所以只用根据行的和求出要填的数...

Codeforces Round #415 (Div. 2)B. Summer sell-off (水题)

B. Summer sell-off time limit per test 1 second memory limit per test 256 megabytes input...
  • HHH_go_
  • HHH_go_
  • 2017年05月21日 16:59
  • 386

Codeforces Round #358 (Div. 2) -- B. Alyona and Mex (思路水题)

B. Alyona and Mex time limit per test 1 second memory limit per test 256 megabytes input ...

Codeforces Round #387 (Div. 2)B. Mammoth's Genome Decoding(水题)

题目: B. Mammoth's Genome Decoding time limit per test 1 second memory limit per test ...

Codeforces Round #359 (Div. 2) B. Little Robber Girl's Zoo(水题)

B. Little Robber Girl’s Zoo time limit per test2 seconds memory limit per test256 megabytes input...

Codeforces Round #368 (Div. 2) B. Bakery (水题)

B. Bakery time limit per test 2 seconds memory limit per test 256 megabytes input ...

Codeforces Round #408 (Div. 2) B. Find The Bone【模拟】水题~

B. Find The Bone time limit per test 2 seconds memory limit per test 256 megabytes input ...

Codeforces Round #385 (Div. 2) -- B. Hongcow Solves A Puzzle (判断是否是矩形,水题)

大体题意: 给你一个n*m 的矩阵,  你要用两个同样的图形构造出一个矩形来,问是否可以?   .表示 这个地方是空地,X表示是一个小元素!你不可以旋转覆盖, 只能移动整体! 思路: 这个题意一开始理...

【Codeforces Round 276 (Div 2)B】【水题】Valuable Resources 最小正方形包含所有点

B. Valuable Resources time limit per test 1 second memory limit per test 256 megabytes ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #369 (Div. 2) A B 两水题 编码能力
举报原因:
原因补充:

(最多只允许输入30个字)