Codeforces Round #369 (Div. 2)

原创 2016年08月30日 10:16:44

已经变成智障选手了。。。。好久没打比赛的后遗症。。。B题没开long long 被搞成SB。。不爽。。抱了SPS的大腿才上的分,感觉很不好。。。

A.
给一个公交车的座位图,X是有人坐,O是没人坐,问能不能找出一个并排的都没人坐的座位,可以的话就输出YES+答案(可以并排的座位用+号代替O),不行的话就输出NO
样例输入1:

6
OO|OX
XO|XX
OX|OO
XX|OX
OO|OO
OO|XX

样例输出1:

YES
++|OX
XO|XX
OX|OO
XX|OX
OO|OO
OO|XX

样例输入2:

4
XO|OX
XO|XX
OX|OX
XX|OX

样例输出2:

NO

就是暴力题嘛。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#define LiangJiaJun main
#define LL long long
#define pa pair<int,int>
using namespace std;
char mp[1004][14];
int n;
void print(){
     for(int i=1;i<=n;i++){
         for(int j=1;j<=5;j++)printf("%c",mp[i][j]);
         printf("\n");
     }
}
int LiangJiaJun(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%s",mp[i]+1);
    for(int i=1;i<=n;i++){
        if(mp[i][1]=='O'&&mp[i][2]=='O'){
            mp[i][1]=mp[i][2]='+';
            printf("YES\n");print();return 0;
        }
        if(mp[i][4]=='O'&&mp[i][5]=='O'){
            mp[i][4]=mp[i][5]='+';
            printf("YES\n");print();return 0;
        }
    }
    printf("NO\n");
    return 0;
}

B.
给一个残缺的幻方,上面有一个格子是0,求问在这个格子填上其他数字之后,能不能是一个幻方。能的话输出那个数字,不能的话输出-1
PS:填的数字要大于0 。。。

样例输入1:

3
4 0 2
3 5 7
8 1 6

样例输出1:

9

样例输入1:

4
1 1 1 1
1 1 0 1
1 1 2 1
1 1 1 1

样例输出:

-1

被这题坑惨了。。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#define LiangJiaJun main
#define LL long long
#define pa pair<int,int>
using namespace std;
int n;
long long a[504][504],x,y,s,t,q;
int check(){
    if(a[x][y]<=0)return 0;

    for(int i=1;i<=n;i++){
        t=0;
        for(int j=1;j<=n;j++)
            t+=a[i][j];
        if(t!=s){
            return 0;
        }
    }
    for(int j=1;j<=n;j++){
        t=0;
        for(int i=1;i<=n;i++)
            t+=a[i][j];
        if(t!=s){
            return 0;
        }
    }
    t=0;
    for(int i=1;i<=n;i++)
        t+=a[i][i];
    if(t!=s) return 0;
    t=0;
    for(int i=1;i<=n;i++)
        t+=a[i][n-i+1];
    if(t!=s) return 0;
    return 1;
}
int LiangJiaJun(){
    scanf("%d",&n);
    if(n==1){
        cout<<"1";return 0;
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(a[i][j]==0){x=i;y=j;}
    for(int i=1;i<=n;i++)
        if(i!=x){
            for(int j=1;j<=n;j++)
                s+=a[i][j];
            break;
        }
    for(int i=1;i<=n;i++)
        q+=a[x][i];
    a[x][y]=s-q;
    if(!check())cout<<"-1"<<endl;
    else cout<<a[x][y]<<endl;

    return 0;
}

D.
一个数字N,给定数组an,ai表示i到ai有连边,请问有多少种情况给所有的边定向,使得图中没有环。答案对10^9+7取模。

题解:按照给定的图,直接连i到a[i]的单向边,保证有且只有一个环(数据特征)。然后缩环,记下那个环的大小k(即环上的点数),答案就是(2^k-2)*(2^(n-k))

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#define LiangJiaJun main
#define LL long long
#define pa pair<int,int>
#define MOD 1000000007LL
using namespace std;
struct edge{
    int to,next;
}e[1000004];
int h[300004],ne=0,cnt=0;
int n,r,p,a[300004],belong[300004],low[300004],dfn[300004],SCC;
int val[300004];
bool inq[300004];
stack<int>ST;
LL temp=0;
LL ans=1;
void insert(int u,int v){
     e[++ne].to = v;
     e[ne].next = h[u];
     h[u] = ne;
}
void tarjan(int x){
     inq[x] = 1;
     dfn[x] = low[x] = ++cnt;
     ST.push(x);
     for(int i=h[x];i;i=e[i].next){
        if(!dfn[e[i].to]){
            tarjan(e[i].to);
            low[x] = min(low[x],low[e[i].to]);
        }
        else if(inq[e[i].to]) low[x] = min(low[x],dfn[e[i].to]);
     }
     if(low[x] == dfn[x]){
        SCC++;int now = -1;
        while(now != x){
            now = ST.top();ST.pop();
            belong[now] = SCC;
            inq[now] = 0;
            val[SCC]++;
        }

     }
}

int LiangJiaJun(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int x;
        scanf("%d",&x);
        insert(i,x);
    }
    for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
    int rest=n;//cout<<SCC<<endl;
    for(int i=1;i<=SCC;i++){
        if(val[i]==1)continue;
        rest-=val[i];
        temp=1;
        for(int k=1;k<=val[i];k++)temp=(temp+temp)%MOD;
        temp=(temp-2LL+MOD)%MOD;
        ans=(ans*temp)%MOD;//cout<<ans<<endl;
    }
    temp=1;
    for(int k=1;k<=rest;k++)temp=(temp+temp)%MOD;
    ans=(ans*temp)%MOD;
    printf("%I64d\n",ans);
    return 0;
}
版权声明:辛辛苦苦码字,你们转载的时候记得告诉我

相关文章推荐

Codeforces Round #369 (Div. 2)

这比赛比较坑啊,看了一下A题过了7000+人,B题直接只剩2000+人。这套题的B题非常坑,很多陷阱。 A: 水题 B: 这题就是一个幻方,但是非常坑,有这么几个坑点:1.如果n==1,随便输出一个数...

Codeforces Round #369 (Div. 2) -- C. Coloring Trees (三维DP)

大体题意: 给你n 个树,你要给这些树染色,  标号是0 表示这棵树还没有染色,标号不是0 表示这棵树已经染色 不需要再染,这片树的美丽程度是  连续相同颜色的数目! 告诉你指定美丽程度K,和  最多...

[Codeforces Round #369 (Div. 2)D. Directed Roads]Tarjan强连通分量+组合计数

[Codeforces Round #369 (Div. 2)D. Directed Roads]Tarjan强连通分量题目链接:[Codeforces Round #369 (Div. 2)D. D...

Codeforces Round #369 (Div. 2) 手速练习赛

一不小心打开cf发现有一场div2在20:00,感觉非常资瓷,作为一个unrated狗感觉是个很好的涨分机会,然后就去注册了。        打比赛前发现注册8000+,害怕。。。        比赛...

Codeforces Round #369 (Div. 2)

A. Bus to Udayland time limit per test 2 seconds memory limit per test 256 megabytes ...

[Codeforces Round #369 (Div. 2) C. Coloring Trees] DP

[Codeforces Round #369 (Div. 2) C. Coloring Trees] DP题目链接:[Codeforces Round #369 (Div. 2) C. Colorin...

codeforces Round #369 (Div. 2) C. Coloring Trees (三维DP)

 C. Coloring Trees time limit per test 2 seconds memory limit per test ...

Codeforces Round #369 (Div. 2) D. Directed Roads

题目链接题意:给你一个n个点,n条有向边的图,你可以使任意条边反向,但是每条边只能反向一次,请求出使图不存在环的所有方案数量仔细思考我们发现,对于一个点数为x的环,除去全部不反向和全部反向两种情况,其...
  • naipp
  • naipp
  • 2016-08-30 23:28
  • 98

Codeforces Round #369 (Div. 2) A~D

A. Bus to Udayland time limit per test 2 seconds memory limit per test 256 megabytes input sta...

Codeforces Round #369 (Div. 2)

A. Bus to Udayland time limit per test 2 seconds memory limit per test 256 megab...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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