pid=5399">【HDOJ 5399】Too Simple

函数映射问题 给出m函数 里面有0~m个函数未知(-1)

问要求最后1~n分别相应仍映射1~n 有几种函数写法(已给定的函数不可变 仅仅可更改未知的函数的映射)

假设映射过程中出现多对一 即入度n出度小于n 的函数 必然冲突 即最后必有落单 映射失败 为0

假设映射完整 已知的连续函数可压缩成一个函数 中间出入度可忽略 因此可压缩为-1 f -1 -1 f -1 -1 f这样的形态 进一步深入可发现中间的f仅仅起到通道作用 就可以压缩为连续的-1之间的映射 已知的函数仅仅起到”折射作用” 假设一段连续的函数相应为

1 2 3

3 2 1

仅仅是进行了扭曲 消除后不影响方案数 即经过与否不重要

连续的-1构成的方案数为 n!^(x-1) x为-1的个数

代码例如以下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#define sc "%lld\n"
#define ll long long
#define mod 1000000007 using namespace std; ll a[101] = { 1, 1};
int f[101][101]; ll pow(ll x,int cnt)
{
int i;
ll ans = 1;
for(i = 0; i < cnt; ++i) ans = ans*x%mod;
return ans;
} int main()
{
int n,m,i,j,cnt,x;
bool isok;
for(i = 2; i <= 100; ++i) a[i] = a[i-1]*i%mod; while(~scanf("%d %d",&n,&m))
{
cnt = 0;
isok = 1;
for(i = 1; i <= m; ++i)
{
scanf("%d",&f[i][1]);
set <int> s;
s.insert(f[i][1]);
if(~f[i][1])
{
for(j = 2; j <= n; ++j)
{
scanf("%d",&f[i][j]);
s.insert(f[i][j]);
}
if(s.size() < n) isok = 0;
}
else cnt++;
} if(!isok) puts("0");
else if(cnt) printf(sc,pow(a[n],(cnt-1)));
else
{
for(i = 1; i <= n; ++i)
{
x = i;
for(j = m; j >= 1; --j)
{
x = f[j][x];
}
if(x != i) break;
}
if(i != n+1) puts("0");
else puts("1");
}
}
return 0;
}

【HDOJ 5399】Too Simple的更多相关文章

  1. 【HDU 5399】Too Simple

    题 Description Rhason Cheung had a simple problem, and asked Teacher Mai for help. But Teacher Mai th ...

  2. 一本通1548【例 2】A Simple Problem with Integers

    1548:[例 2]A Simple Problem with Integers 题目描述 这是一道模板题. 给定数列 a[1],a[2],…,a[n],你需要依次进行 q 个操作,操作有两类: 1 ...

  3. 【HDOJ 5379】 Mahjong tree

    [HDOJ 5379] Mahjong tree 往一颗树上标号 要求同一父亲节点的节点们标号连续 同一子树的节点们标号连续 问一共同拥有几种标法 画了一画 发现标号有二叉树的感觉 初始标号1~n 根 ...

  4. 【HDOJ 2089】不要62

    [HDOJ 2089]不要62 第一个数位dp的题 做的老困难了...只是好歹是做出来了 迈出了第一步.. 对大牛来说这样的题都是小case ps:新上一个记忆化方法 一些绕弯的题里用dfs好想些 代 ...

  5. 【HDOJ 5371】 Hotaru&#39;s problem

    [HDOJ 5371] Hotaru's problem Manacher算法+穷举/set Manacher算法一好文:http://blog.csdn.net/yzl_rex/article/de ...

  6. 【HDOJ 5654】 xiaoxin and his watermelon candy(离线+树状数组)

    pid=5654">[HDOJ 5654] xiaoxin and his watermelon candy(离线+树状数组) xiaoxin and his watermelon c ...

  7. 【HDOJ 3652】B-number

    [HDOJ 3652]B-number 给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化! . 一入记忆化深似海. ..再也不想用递推了...发现真的非常好想 仅仅要保证满 ...

  8. 【HDOJ 5419】 Victor and Toys (排列组合)

    [HDOJ 5419] Victor and Toys n个玩具 m个区间 每一个玩具有一个beauty值 问任选三个区间 三区间的MINleft~MAXright的和的期望值 预处理一个数组 存放每 ...

  9. 【HDOJ 2255】奔小康赚大钱(KM算法)

    [HDOJ 2255]奔小康赚大钱(KM算法) 奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

随机推荐

  1. module_param

    该宏定义在include/linux/moduleparam.h中 #define ___module_cat(a,b) __mod_ ## a ## b #define __module_cat(a ...

  2. WIN10配置MAVEN

    添加新的系统环境变量M2_HOME, 并设置其值为你安装的目录MAVEN_HOME=D:\Softwares\apache-maven-3.2.2. 更新系统PATH 变量, 添加;%M2_HOME% ...

  3. MIP启发式算法:爬山算法 (Hill climbing)

    本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文讲述的是求解MIP问题的启发式算法中的爬山算法 (Hill climbing). 目录 前言 Hill climbing 的过程 ...

  4. 学习笔记1——下载和安装WordPress

    首先,到WordPress官方网站下载WordPress,下载地址https://cn.wordpress.org/txt-download/ 然后,将下载后的文件夹放在www目录下,到浏览器中输入l ...

  5. OSPF 提升 一 ----基础

    ospf  ccnp内容   一  link-state protocols      IGP   开放式的最短路径优先协议     公有协议 支持中到大型的网络    spf算法 链路状态协议 1. ...

  6. POJ-2187 Beauty Contest,旋转卡壳求解平面最远点对!

     凸包(旋转卡壳) 大概理解了凸包A了两道模板题之后在去吃饭的路上想了想什么叫旋转卡壳呢?回来无聊就搜了一下,结果发现其范围真广. 凸包: 凸包就是给定平面图上的一些点集(二维图包),然后求点集组成的 ...

  7. 构建maven的web项目时注意的问题(出现Error configuring application listener of class org.springframework.web.context.ContextLoaderListener 或者前端控制器无法加载)

    构建项目后或者导入项目后,我们需要bulid path--->config build path 特别是maven的依赖一定要 发布到WEB_INF的lib下面,不然在发布项目的时候,这些依赖都 ...

  8. iossharesdk微信登录出错

    只用下面的初始化就行了 //    //添加微信应用 注册网址 http://open.weixin.qq.com //    [ShareSDK connectWeChatWithAppId:mod ...

  9. 关于流媒体(m3u8)的播放与下载

    前一段时间做了一个视频播放下载应用,抓取的是优酷的视频,虽然优酷有自己的开发平台http://open.youku.com/,但未真正的实现.所以只能靠抓取视频源,Youku的视频采取了加密+动态的获 ...

  10. BZOJ 2720 [Violet 5]列队春游 ——期望DP

    很喵的一道题(我可不是因为看了YOUSIKI的题解才变成这样的) $ans=\sum_{x<=n}\sum_{i<=n} iP(L=i)$ 其中P(x)表示视线为x的概率. 所以只需要求出 ...