自古成功在尝试 jzoj 2017.8.21 B组

第一题

【NOIP2011模拟7.29】铃仙·优昙华院·稻叶 (Standard IO)
Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limits

Description

  在幻想乡,铃仙·优昙华院·稻叶是从月球逃到永远亭的月兔。同样居住在永远亭的地球兔子因幡帝老是对铃仙恶作剧。某一天,铃仙终于决定要惩罚一下帝,不过首先得在迷途竹林里把帝抓住。永远亭的迷途竹林可以视为一个由N 个路口(编号1..N),M 条单向路连接的区域。开始时,帝在路口1,每一个单位时间,帝会以相同的概率走到相邻的路口或是停留在当前路口,一条路可以重复走,但是帝不会走回头路,也就是说如果帝从路口x 走到了路口y,在到过其他路口前,她一定不会从路口y 走回路口x。现在铃仙想知道,在T
秒钟以后,在哪个路口抓到帝的可能性最大。

Input

  第1 行:3 个非负整数N, M, T。
  第2..M+1 行:每行2 个整数u,v,表示存在一条从路口u 到路口v 的单向路。

Output

  第1..N 行:一个实数,第i 行表示在路口i 抓到帝的概率,单位为%,保留3 位小数。

Sample Input

3 4 2
1 2
1 3
2 1
2 3

Sample Output

11.111
27.778
61.111

Data Constraint

Hint

【样例解释】
  时刻0: 1(100%)
  时刻1: 1(33.333%) 2(33.333%) 3(33.333%)
  时刻2: 1(11.111%) 2(11.111%+16.667%) 3(33.333%+11.111%+16.667%)
  在时刻2 时,只能从路口2 走向路口3,不可返回路口1。若时刻2 选择停留在路口2,时刻3 时仍然不可以从路口2 走回路口1,因为尚未走到过其他路口。
【数据范围】
  对于30%的数据,N≤5,M≤10,T≤10
  对于60%的数据,N≤10,M≤50,T≤500
  对于100%的数据,N≤50,M≤2000,T≤500
【注意】
  数据保证不会出现重边和自环、

题解:题意就是,在一个有向图中,每一秒都可以走向现在由所在点指出的边的点,但不可以走回上一秒所在的点。 就是概率dp嘛,设f[i][j][k]为在第k秒所在点为i,上个点为j的概率。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,T;
int a[60][60],Num=0,d[10000],head[1000];
double f[60][60][601];
struct hh
{
    int next,to;
}l[2010];
void add(int x,int y)
{
    Num++;
    l[Num].next=head[x];
    l[Num].to=y;
    head[x]=Num;
}
int main()
{
    freopen("in.txt","r",stdin);
    memset(f,0,sizeof(f));
    memset(a,0,sizeof(a));
    cin>>n>>m>>T;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        add(x,y);
        a[x][y]=1;
        d[x]++;
    }
    f[1][1][0]=1;
    for(int t=0;t<T;t++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(f[i][j][t]>0)
                {
                    bool flag=1;
                    if(a[i][j]) flag=0;
                    for(int p=head[i];p;p=l[p].next)
                    {
                        int v=l[p].to;
                        if(v==j) continue;
                        f[v][i][t+1]+=f[i][j][t]/(d[i]+flag);
                    }
                    f[i][j][t+1]+=f[i][j][t]/(d[i]+flag);
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        double ans=0;
        for(int j=1;j<=n;j++)
        {
            ans+=f[i][j][T];
        }
        printf("%.3lf\n",ans*100);
    }
    return 0;
}

第二题

  1. 【NOIP2011模拟7.29】藤原妹红 (Standard IO)
    Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limits
    Goto ProblemSet

Description

  在幻想乡,藤原妹红是拥有不老不死能力的人类。虽然不喜欢与人们交流,妹红仍然保护着误入迷途竹林村民。由于妹红算得上是幻想乡最强的人类,对于她而言,迷途竹林的单向道路亦可以逆行。在妹红眼中,迷途竹林可以视为一个由N 个路口(编号1..N),M 条不同长度双向路连接的区域。妹红所在的红之自警队为了方便在迷途竹林中行动,绘制了一张特殊的迷途竹林地图,这张地图上只保留了N-1 条道路,这些道路保证了任意两个路口间有且仅有一条路径,并且满足所有保留的道路长度之和最小,我们称这些道路为『自警队道路』。现在妹红打算在其中一个连接有多条『自警队道路』的路口设立根据地,当去掉这个根据地所在路口后,就会出现某些路口间无法通过『自警队道路』相互连通的情况,我们认为这时仍然能够通过『自警队道路』连通的路口属于同一个『区域』。妹红希望最后每个『区域』的『自警队道路』总长尽可能平均,请计算出她应该选择哪一个路口作为根据地。
  下例中红色的路口为妹红选择的根据地,实线边表示『自警队道路』,绿色虚线边表示非『自警队道路』,数字表示边权,『自警队道路』中相同颜色的实线边代表属于同一个『区域』:
  这里写图片描述
  (尽可能平均即权值最小,设每一块『区域』的路线总长为Length[i],平均路线长度为Avg=SUM{Length[i]}/区域数,权值d=Σ((Length[i]-Avg)^2))

Input

  第1 行:2 个正整数N,M。
  第2..M+1 行:每行2 个整数u,v 和1 个实数len,表示u,v 之间存在长度为len 的边。

Output

  第1 行:1 个整数,最后选择的路口编号,存在多个可选路口时选择编号小的。

Sample Input

3 3
3 1 5
3 2 4
1 2 3

Sample Output

2

Data Constraint

Hint

【样例解释】
  妹红的『固定道路』为(1,2)和(2,3)。只能选择2 作为根据地,产生的两个区域Length[i]分别为3 和4,所以方差为:(4-3.5)^2+(3-3.5)^2=0.5
【数据范围】
  对于60%的数据:3≤N≤2,000,N-1≤M≤50,000
  对于100%的数据:3≤N≤40,000,N-1≤M≤200,000
  对于100%的数据:0 【注意】
  保证不存在相同距离的线路,两个路口间可能出现多条路径,且任意点对间至少存在一条路径。

第三题

  1. 【NOIP2011模拟7.29】稗田阿求 (Standard IO)
    Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limits
    Goto ProblemSet

Description

  在幻想乡,稗田乙女是负责书写《幻想乡缘起》的家族。由于需要代代相传关于幻想乡的记忆,稗田乙女采用了一些特殊的记录方式。对于相同重复的文字,稗田乙女会用一个数字来代替,然后用一个数列来表示一个段文字。比如1代表”A”,2代表”C”,那么{1,2}就
代表”AC”,{2,1,2}就代表”CAC”。不过由于年代过于久远,到阿求时已经是第九代稗田乙女,所以难免会出现错误。现在阿求有N 个数字(1..N)和N 个字符(‘A’..第N 个字母),以及一些以前传承下来的M 组文字段和对应的数列。每一组文字段和数列相互对应,文字的第
i 个字符对应着数列的第i 项。阿求想要知道怎样安排N 个数字和字符的对应关系,能够使组数尽可能多的文字段和数列组合满足该对应关系。数字和字符间一一对应,不会出现多对一或一对多的情况。

Input

  第1 行:2 个正整数N, M。
  第2..2*M+1 行:每2 行为一组,第1 行为文字段落,第2 行为数列。保证文字段落的字符数L 等于数列数字个数L,且均在1..N。文字段落只包含大写字母。

Output

  第1 行:最多能够匹配的文字段落和数列组合数量。

Sample Input

3 3
ACCA
1 3 3 1
AAC
2 2 1
BCBC
3 1 3 1

Sample Output

2

Data Constraint

Hint

【样例解释】
  当A=2,B=3,C=1 时第2、3 字符串和数列组合满足对应关系。
【数据范围】
  对于60%的数据:1≤N≤10,1≤M≤20
  对于100%的数据:1≤N≤26,1≤M≤60
  对于100%的数据:1≤L≤100
【注意】
  保证每一组文字段和数列组合均合法,在一组文字段和数列组合里面不会出现多个字符对一个数字,或是一个字符对多个数字的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值