26850: 收集数码晶体 有40%错误

http://arena.acmclub.com/problem.php?id=26850

数码世界的国王Shoutmon想要在n个小岛上举办一个游戏,来让数码宝贝们好好玩耍。背景是这样的:在这n个小岛之间事先安放了一些单向通道,每个通道连接两个不同的小岛,且只能按一个给定的方向通过。数码宝贝每次由通道到达一个小岛时都会令体内增加一个“数码晶体”。

Shoutmon制定了一项规则,即数码宝贝们可以从某个小岛出发,到达一个目的小岛,如果到达目的小岛后体内的“数码晶体”数量恰好为L,那么此时可以在小岛上的兑奖处领取奖品(领完奖品后自动退出游戏)。注意,到达目的小岛后如果“数码晶体”数量不足,那么仍然可以离开小岛,直到某次回到目的小岛时“数码晶体”的数量恰好为L。每个小岛(包括起始小岛和目的小岛)与每条通道都不限制到达和通过次数。初始状态下体内的“数码晶体”数量为0。

为了保证活动正常进行,Shoutmon想要知道,有多少条路径可以从起始小岛S到达目的小岛T并领奖(可能有多次查询)。

输入

每个输入文件中一组数据。

第一行三个整数n、m、L(2<=n<=30,0<=m<=n*(n-1),1<=L<=100),分别代表小岛个数、单向通道条数、恰好需要的“数码晶体”数。

接下来m行,每行两个整数u和v,代表从小岛u到小岛v有一条单向通道(假设小岛编号为从0到n-1)。数据保证u不等于v,且相同的有序对(u,v)最多出现一次。

然后一个正整数k(k<=n*n),表示查询次数。

接着k行,每行两个整数S和T,表示需要查询有多少条路径可以从起始小岛S到达目的小岛T并领奖。

输出

输出k行,每行一个整数,对应查询的结果,即从起始小岛到达目的小岛并领奖的路径条数。由于路径条数可能很多,因此将结果模上1000000007。

样例输入

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

样例输出

0 2 1

提示

// hahaha.cpp : 定义控制台应用程序的入口点。
//

#include <stdafx.h>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <map>
#include <string>
#include <cstdio>
#include <set>
#include <algorithm>
#include <string.h>

using namespace std;
const int maxn=31;
int n,m,limit;
long long hahaha[maxn][maxn][100]={0};
bool haha[maxn][maxn][100]={false};

set<int> G[maxn];
long long query(int a,int b,int li)
    {
    if(haha[a][b][li]==true)
        {
        return hahaha[a][b][li];
        }
    long long tmp=0;
    set<int>::iterator it=G[a].find(b);
    if(it!=G[a].end()&&li==1)return 1;
    if(li==0&&a!=b)return 0;
    if(li<0)return 0;
    for(set<int>::iterator it=G[a].begin();it!=G[a].end();it++)
        {

            hahaha[*it][b][li-1]=(query(*it,b,li-1)+1000000007)%1000000007;
            haha[*it][b][li-1]=true;
            tmp=(tmp+hahaha[*it][b][li-1])%1000000007;
        }
    return tmp;
    }

int main()
{
scanf("%d %d %d",&n,&m,&limit);
for(int i=0;i<m;i++)
    {
    int a,b;
    scanf("%d %d",&a,&b);
    G[a].insert(b);
    }
int k;
scanf("%d",&k);
for(int i=0;i<k;i++)
    {
    int a,b;
    scanf("%d %d",&a,&b);
    long long count=query(a,b,limit);
    long long jieguo=count%1000000007;
    printf("%lld\n",jieguo);
    }

    return 0;
}
测试文件:/4.out   结果:答案错误
	=======原因======
	当参考答案输出:
	280157144
	-------时---------
	你的程序输出:
	0
	=================
测试文件:/0.out   结果:答案正确
测试文件:/2.out   结果:答案正确
测试文件:/3.out   结果:答案正确
测试文件:/1.out   结果:答案错误
	=======原因======
	当参考答案输出:
	505425294
	-------时---------
	你的程序输出:
	0
	=================

   正解

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 60;
const long long MOD = 1000000007;
long long G[maxn][maxn], ans[maxn][maxn], temp[maxn][maxn];

void MatrixPow(int n, int L) {
    for(int times = 0; times < L; times++) {
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                temp[i][j] = 0;
                for(int k = 0; k < n; k++) {
                    temp[i][j] = (temp[i][j] + (ans[i][k] * G[k][j] % MOD + MOD)) % MOD;
                }
            }
        }
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                ans[i][j] = temp[i][j];
            }
        }
    }
}

void init() {
    memset(G, 0, sizeof(G));
    memset(ans, 0, sizeof(ans));
    for(int i = 0; i < maxn; i++) {
        ans[i][i] = 1;
    }
}

int main() {
        init();
        int n, m, L, u, v;
        scanf("%d%d%d", &n, &m, &L);
        for(int i = 0; i < m; i++) {
            scanf("%d%d", &u, &v);
            G[u][v] = 1;
        }
        MatrixPow(n, L);
        int k;
        scanf("%d", &k);
        for(int i = 0; i < k; i++) {
            scanf("%d%d", &u, &v);
            printf("%lld\n", (ans[u][v] % MOD + MOD) % MOD);
        }
    return 0;
}
时间: 2024-12-23 18:43:13

26850: 收集数码晶体 有40%错误的相关文章

华为ENSP启动AR时报40错误百分百可行

开始启动AR时报 40错误,与是呼各种百度和谷歌,及华为官方论坛,尝试了各种办法无果, 最后发现是vbox不能建虚拟机,于是开始找vbox的资料 最终发现是64位系统与高版本的vbox兼容性存在问题 换了一个低版本的vbox事情就解决了. 就用它就可以只要它能正常用了,AR启动时40错误自然就没有了

[转]ensp出现的40错误的解决办法

一. 问题: 装了ensp软件,不管怎么打开都是跳出40的错误,通过自带的帮助文档也没有得到解决. 操作系统:ghost版本的64 win7 sp1 二. 解决方法: a. 原因1: 最后查到vmbox出了问题,单独从vmbox启动时会跳出这个错误Failed to open a session for the virtual machine,Unable to load R3 module xxxx/VBoxDD.DLL(VBoxDD)在百度上查到,是用的gho版系统,主题破解了,所以就跳出这

android 收集已发布版本的错误信息(UncaughtExceptionHandler)

前言:在开发安卓的过程中,debug绝对是任何开发人员极为痛绝的事情.在本地开发过程中,如果出现错误,还可以查看logcat信息,但是市场上的手机五花八门,各种型号各种屏幕尺寸,甚至各种各样的用户,开发者难以确定什么时候用户会出现bug.那么搜集已经发布的版本bug信息,对于版本更新和用户体验是十分重要的事情,那么如何实现? 在项目中用到这种需求,花了半天时间研究了一下,具体用法待我一一道来. 首先,是实现UncaughtExceptionHandler. /** * 收集用户手机崩溃信息,上传

.top域名注册量15强:西部数码涨幅超40万 增势惊人

IDC评述网(idcps.com)03月04日报道:据ntldstats.com最新数据显示,截止至2016年3月3日17时,国内外.top域名注册总量达到1,630,474个,相比上期1月20日净增606,540个,涨幅巨大.其中,域名商西部数码.top域名总量排在首位,为789,564个,较上期净增404,727个,增长率为105.17%,增势惊人.下面,请与IDC评述网一同关注国内外.top域名注册总量前15强域名商的数据情况. (图)国内外域名服务商.top域名注册总量排行榜 通过上图,

利用定时器0模式1中断消除4位数码管动态显示闪烁问题的项目工程

1 /******************************************************************************** 2 定时器定时1ms,数码管以秒钟计时,加上定时器0中断可消除数码管刷新时的闪烁问题, 3 闪烁问题是由while语句中分离数字时计算造成的,因为每次1s时间到,在数码管刷新前 4 都要进行计算,耽误了时间,导致闪烁,加了中断以后则是先刷新数码管再分离数字. 5 **********************************

运维工作中常见错误总结分享

作为一个小运维,要时刻学习.总结.最近收集了一下常见的错误,和大家分享一下.希望对大家有用 一.卸载的时候出现的错误 umount /dev/nb1 device is busy 解决:找到是什么进程使得他busy,用 lsof /dev/nb1 . kill掉那个进程,然后重新umount即可. 二.GD2编译的时候出现的错误 The usual way to define `LIBTOOL' is to add `AC_PROG_LIBTOOL' Libtool library used b

c_src/esdl.h:73:35: 错误:未知的类型名‘ErlDrvSizeT’

[[email protected] esdl]# rebar compile ==> esdl (compile) Compiling c_src/esdl_gl.c In file included from c_src/esdl_gl.c:14:0: void gl_dispatch(sdl_data *, int, ErlDrvSizeT, char *); ^ c_src/esdl_gl.c: 在函数'es_init_opengl'中: c_src/esdl_gl.c:106:2: 警

iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

本章内容 ●    iOS应用中的网络错误源 ●    检测网络的可达性 ●    错误处理的经验法则 ●    处理网络错误的设计模式 到目前为止,我们所介绍的iPhone与其他系统的网络交互都是基于一切正常这个假设.本章将会放弃这个假设,并深入探究网络的真实世界.在真实世界中,事情是会出错的,有时可能是非常严重的错误:手机进入与离开网络.包丢掉或是延迟:网络基础设施出错:偶尔用户还会出错.如果一切正常,那么编写iOS应用就会简单不少,不过遗憾的是现实并非如此.本章将会探讨导致网络操作失败的几

Fundebug上线Node.js错误监控啦

作为全栈JavaScript错误实时监测平台,Fundebug的Node.js实时错误监测服务上线啦,我们能够帮助开发者及时,高效地发现并且解决Node.js错误,从而提高开发效率,并提升用户体验. Fundebug为什么监测Node.js? 程序员通常是比较自信的,他们坚持自己写的代码没有问题.然而,再追问一下自己: 我的代码真的100%没有问题吗? 我做了完整的单元测试吗? 难道我要花更多的时间没完没了的写单元测试? 那么问题在哪? 当Node.js后台程序在服务器上出错了,然而开发者并不知