------2014-10-29

一同学发来的题目:

A.

  G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军)。现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死队队员的独立性,要求如果一名士兵在敢死队中,他的直接上级不能在敢死队中。 请问,G将军有多少种派出敢死队的方法。注意,G将军也可以作为一个士兵进入敢死队。 输入格式 输入的第一行包含一个整数n,表示包括G将军在内的军队的人数。军队的士兵从1至n编号,G将军编号为1。 接下来n-1个数,分别表示编号为2, 3, ..., n的士兵的直接上级编号,编号i的士兵的直接上级的编号小于i。 输出格式 输出一个整数,表示派出敢死队的方案数。由于数目可能很大,你只需要输出这个数除10007的余数即可。

样例输入

3

3 1 1

样例输出

4

样例说明 : 这四种方式分别是: 1. 选1; 2. 选2; 3. 选3; 4. 选2, 3。

样例输入

7

1 1 2 2 3 3

样例输出

40

数据规模与约定 对于20%的数据,n ≤ 20; 对于40%的数据,n ≤ 100; 对于100%的数据,1 ≤ n ≤ 100000。

资源约定: 峰值内存消耗 < 256M CPU消耗  < 2000ms

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MOD 10007
#define N 100010

struct Edge
{
    int to,next;
}edge[N<<1];
int head[N],tot;
int n;
int dp[N][2];      //1表示取当前,0表示取儿子

void init()
{
    tot=0;
    memset(head,-1,sizeof(head));
    memset(dp,0,sizeof(dp));
}
void add(int x,int y)
{
    edge[tot].to=y;
    edge[tot].next=head[x];
    head[x]=tot++;
}
void dfs(int u)
{
    dp[u][0]=dp[u][1]=1;
    for(int i=head[u];i!=-1;i=edge[i].next)
    {
        int v=edge[i].to;
        dfs(v);
        dp[u][1]=(dp[u][1]*dp[v][0])%MOD;
        dp[u][0]=(dp[u][0]*(dp[v][1]+dp[v][0]))%MOD;
    }
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        init();
        for(int i=2;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            add(x,i);
        }
        dfs(1);
        printf("%d\n",(dp[1][0]+dp[1][1]-1)%MOD);
    }
    return 0;
}

B、

你一定听说过“数独”游戏。 如【图1.png】,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。

数独的答案都是唯一的,所以,多个解也称为无解。

本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。

本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。

格式要求,输入9行,每行9个数字,0代表未知,其它数字为已知。 输出9行,每行9个数字表示数独的解。

例如: 输入(即图中题目):

005300000

800000020

070010500

400005300

010070006

003200080

060500009

004000030

000009700

程序应该输出:

145327698

839654127

672918543

496185372

218473956

753296481

367542819

984761235

521839764

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 9

struct node
{
    int x,y;
}s[N*N+2];

int n;
bool flag;
int mpt[N+1][N+1];

bool fit(int t,int k)
{
    int i,j;
    for(i=0;i<N;i++)
    {
        if(mpt[s[t].x][i]==k || mpt[i][s[t].y]==k) return 0;
    }
    int x=(s[t].x/3)*3;
    int y=(s[t].y/3)*3;
    for(i=x;i<x+3;i++)
    {
        for(j=y;j<y+3;j++)
        {
            if(mpt[i][j]==k) return 0;
        }
    }
    return 1;
}
void DFS(int now)
{
    if(now==n+1)
    {
        for(int i=0;i<N;i++)
        {
            for(int j=0;j<N;j++)
            {
                printf("%d",mpt[i][j]);
            }
            printf("\n");
        }
        flag=1;
        return;
    }
    for(int k=1;k<=N;k++)
    {
        if(!flag && fit(now,k))
        {
            mpt[s[now].x][s[now].y]=k;
            DFS(now+1);
            mpt[s[now].x][s[now].y]=0;
        }
    }
}
int main()
{
    n=0;
    flag=0;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            scanf("%1d",&mpt[i][j]);
            if(!mpt[i][j])
            {
                s[++n].x=i;
                s[n].y=j;
            }
        }
    }
    DFS(1);
    return 0;
}
时间: 2024-08-25 12:00:19

------2014-10-29的相关文章

2014.3.29阿里巴巴暑期实习笔试题分析

参考:http://blog.csdn.net/iloveyoujelly/article/details/22941531 下面中的[分析]是我给出的. 2014.3.29阿里巴巴暑期实习笔试题分析 一.单选 1.假设一个主机ip为192.168.5.121,子网掩码为255.255.255.248,则该主机的网络号部分(包括子网号部分)为-- A.192.168.5.12  B 192.168.5.121   C 192.168.5.120   D 192.168.5.32 参考答案 C [

&lt;2014 04 29&gt; *nix环境编程常用库总结

-------------------------linux常用头文件如下:POSIX标准定义的头文件<dirent.h>        目录项<fcntl.h>         文件控制<fnmatch.h>    文件名匹配类型<glob.h>    路径名模式匹配类型<grp.h>        组文件<netdb.h>    网络数据库操作<pwd.h>        口令文件<regex.h>   

第六届华为创新杯编程大赛第二轮(2014.4.29)

第一题:外星人比数的大小 来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(0.00000000000000000000001s以内)按照他的规则比较地球人熟悉的两个十进制数字的大小,他比较的规则如下:1.将要比较的两个数字分别转换成二进制数字:2.计算两个二进制数字中1的个数,个数多的数字为两者中的大者:3.负数按照其绝对值进行比较:请利用地球人发明的计算机程序逼近都教授的特异功能,实现时可以有以下约束:1.输入数据为范围在-327

&lt;2014 04 29&gt; c/c++常用库总结

C 标准库 ============================================================================================== C++ 标准库 STL 标准库中提供了C++程序的基本设施.虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作. 1. Dinkumware C++ Library 参考站点:http://w

Linux - Eclipse CDT + GCC 安装(2014.10.2)

Eclipse CDT + GCC 安装 (2014.10.2) 本文地址:http://blog.csdn.net/caroline_wendy 1. 安装Eclipse,在官方网站下载Eclipse标准版(Linux平台)即可,解压到当前文件夹. 2.  下载JDK,选择Linux32位,即可,解压默认目录:jdk1.8.0_20 ; 把文件夹复制到jvm中. sudo cp -r ~/jdk1.8.0_20/ /usr/lib/jvm/ ; 3. 修改配置文件(profile): # 配置

背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

原文:背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) RichTextBlock RichTextBlockOverflow RichEditBox 示例1.RichTextBlock 的示例Controls/TextControl/RichTextBlockDemo.xaml <Page

2014.4.29 新入职第二天

很开心,入职的第二天,同事们都很友好和善.加油! 2014.4.29 新入职第二天,码迷,mamicode.com

个人回忆录 2014.10.20 至 2015.7.30

时间过的太快.以至于对我来说都记不起来每天做了些什么事情.工作节奏太快,下班.上班 然后再下班再上班. 每天下班后都晚上9点左右.真的看不见日出看不见日落. 从2014.10.20 到现在已经快10个月了.新的工作环境以及新的同事.上司都已熟悉了.回想刚刚开始进入这个研发团队的时候. 高原反应非常强烈,总是在疑问自己为何选择这个方向—C++ 客户端开发.为何不沿用最熟悉的.NET 平台开发.当从新学习一门新技术的时候 才发现自己太笨.有点像当年的高考,时间很紧.因为没有太多的时间用在学习上.MF

2014.04.29

汇编语言是依赖于处理器的.不同的处理器上面的汇编语言是不一样的. 语言的发展有一个趋势,就是离硬件越来越远.从汇编,到C,C++,面向对象的Java等,能够发现,后面的语言越来越具有可移植性,不绝对依赖于底层硬件.比如跨平台的Java,其卖点之一就是其跨平台可移植性.还有一个点,就是越来越抽象,语言本身的思想点越来越明显.比如高级语言里面的面向对象思想,多线程,设计模式,通信模型等等,都是随着语言本身发展而来的.在低级语言中,如此抽象结构的东西是没有的. 计算机游戏. 计算机游戏只是计算机应用的

10.28 rsync工具介绍 - 10.29/10.30 rsync常用选项 - 10.31 rsync通过ssh同步

- 10.28 rsync工具介绍 - 10.29/10.30 rsync常用选项 - 10.31 rsync通过ssh同步 # 10.28 rsync工具介绍 -/A目录 --> /B目录(A目录更新了一个文件,每次更新都需要把A目录拷贝到B目录),如果用cp命令 比较浪费时间,耗费磁盘空间,磁盘压力 读写之类的, -使用rsync -av /etc/passwd /tmp/1.txt -a选项就是包含了好几个选项  ,v 是可视化,可以看到拷贝的过程 ``` [[email protecte