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) D. Directed Roads (dfs+组合数学 图论)

传送门:D. Directed Roads 描述: D. Directed Roads time limit per test 2 seconds memory li...
  • guhaiteng
  • guhaiteng
  • 2016年08月30日 19:06
  • 373

Codeforces Round #378 (Div. 2) E. Sleep in Class

链接:http://codeforces.com/contest/733/problem/E 题意:给一个只含'U'和'D'的字符串,U表示向右走,D表示向左走。每个格子踩一次之后翻转(U变D,D变...
  • Fsss_7
  • Fsss_7
  • 2016年11月15日 13:48
  • 359

Codeforces Round #442 (Div. 2)

A. #include using namespace std; typedef long long ll; int main() { string s; cin >> s; ...
  • Egqawkq
  • Egqawkq
  • 2017年10月24日 02:15
  • 238

Codeforces Round #327 (div.2)(A B C D)

codeforces round #327 (div.2)
  • lincifer
  • lincifer
  • 2015年10月26日 13:11
  • 1087

Codeforces Round #258 (Div. 2)-(A,B,C,D,E)

A:Game With Sticks 水题。。。每次操作,都会拿走一个横行,一个竖行。 所以一共会操作min(横行,竖行)次。 #include #include #include #include ...
  • rowanhaoa
  • rowanhaoa
  • 2014年07月25日 14:39
  • 1474

Codeforces Round #430 (Div. 2) A B C D

A. Kirill And The Game time limit per test 2 seconds memory limit per test 256 megabytes...
  • sinat_35406909
  • sinat_35406909
  • 2017年08月31日 21:38
  • 139

【解题报告】Codeforces Round #401 (Div. 2)

简略的解题报告。
  • TRiddle
  • TRiddle
  • 2017年02月25日 17:55
  • 411

Codeforces Round #395 (Div. 2)(ABCD)

ps:打完这场cf才知道自己真的很菜,还是停留在AB题的水平,有时候CD其实很简单,但就是想不到,别人一眼看出而我就是想不到,有时候想到了点子上但就是突破不了 题目链接:  Codeforc...
  • qq_34731703
  • qq_34731703
  • 2017年02月03日 12:50
  • 492

Codeforces Beta Round div.2 #228 A B C D E

Codeforces Beta Round #228 A B C D E
  • hcbbt
  • hcbbt
  • 2014年02月04日 23:10
  • 1927

Codeforces Beta Round #2 A B C

Codeforces Beta Round #2 A B C
  • hcbbt
  • hcbbt
  • 2014年02月04日 23:18
  • 1638
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #369 (Div. 2) A B 两水题 编码能力
举报原因:
原因补充:

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