WA了一下午。。。。

1WA:T了,因为阶乘没打表所以时间超了。。

2WA,3WA:runtime error,检查的value数组开小了,应该是MAXN。。

4WA、5WA、6WA:改了改对cnt的处理,该加Mod的加Mod

7WA:complication error,调试函数忘了删。。

8WA:所有的int改成了long long

9WA、10WA:改了下最后的思路和对于 m = 1 的处理

11WA:加了两个*1LL

12WA、13WA:发现输入有问题,中间有-1的时候会跳出

14WA:n打成了m

15: AC

整体思路就是只要保持1 - n的每一条路是单射,只需要保证首和尾的数相同即可,不需要考虑中间过程,

特殊情况就是没有-1的时候,需要判断能不能够满足条件。

 #include<stdio.h>
 #include<cstring>
 #include<set>
 typedef long long LL;
 using namespace std;
 ;
 ;
 long long ans;
 int n, m;
 int cnt;
 int a[MAXN][MAXN];
 long long jc[MAXN];
 int flag;
 set<int>s;
 void init(){
     jc[] = ;
     ; i < MAXN; ++i){
         jc[i] = ((jc[i-]*1LL) % MOD*i)%MOD;
     }
 }
 bool judge(){
     ;
     int tmp;
     int value[MAXN];
      ){
         ; i <= n; ++i){
             ][i] != i)
                 fflag = ;
         }
         return fflag;
     }
     else{
         memset(value,,sizeof(value));
         ; i <= n; ++i){
             tmp = a[m][i];
             ; j >= ; --j){
                 value[i] = a[j][tmp];
                 tmp = a[j][tmp];
             }
         }
         ; i <= n; ++i)
             if( value[i] != i )
                 fflag = ;

         return fflag;
     }
 }
 int main(){
     freopen("in.txt","r",stdin);
     init();
     while(~scanf("%d%d", &n, &m)){
         flag = ;
         memset(a,,sizeof(a));
         s.clear();
         ; i <= m; i++){
             ; j <= n; j++){
                 scanf("%d", &a[i][j]);
                 ] == -)
                     break;
                 )
                     flag = ;
                 s.insert(a[i][j]);
             }
             ] != -){
                 flag = ;
             }
             s.clear();
         }
          ){
             printf("0\n");
             continue;
         }
         ans = ;
         cnt = ;
         flag = ;
         ; i <= m; ++i){
             ] == - ){
                 cnt++;
                 flag = ;
             }
         }
         if(cnt){
             ; i < cnt; ++i){
                 ans =( ans *1LL* jc[n] )% MOD;
             }
         }
         if(flag)
             printf("%I64d\n",ans);
         else{
             if(judge())
                 printf("1\n");
             else
                 printf("0\n");
         }
     }
 }

hdoj 5399 Tpp simple的更多相关文章

  1. HDOJ 5399 Too Simple

    每个函数都必须是一个排列,经过连续的一段确定函数后数字不能少. 满足上面的条件的话,仅仅要有一个-1函数特别的排列一下就能够满足要求,剩下的能够任意填 没有-1的话特判 Too Simple Time ...

  2. 构造 HDOJ 5399 Too Simple

    题目传送门 题意:首先我是懂了的,然后我觉得很难讲清楚就懒得写了,关键理解f1(f2(fm(i)))=i,不懂的戳这里构造:如果fi(j)不是映射到(1~n),重复或者不在范围内的肯定无解.还有没有- ...

  3. 【HDOJ 5399】Too Simple

    pid=5399">[HDOJ 5399]Too Simple 函数映射问题 给出m函数 里面有0~m个函数未知(-1) 问要求最后1~n分别相应仍映射1~n 有几种函数写法(已给定的 ...

  4. HDOJ 4974 A simple water problem

    A simple water problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  5. HDU 5399 Too Simple(过程中略微用了一下dfs)——多校练习9

    Too Simple Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...

  6. HDOJ 4975 A simple Gaussian elimination problem.

    和HDOJ4888是一样的问题,最大流推断多解 1.把ISAP卡的根本出不来结果,仅仅能把全为0或者全为满流的给特判掉...... 2.在残量网络中找大于2的圈要用一种类似tarjian的方法从汇点開 ...

  7. 【HDOJ】2451 Simple Addition Expression

    递推,但是要注意细节.题目的意思,就是求s(x) = i+(i+1)+(i+2),i<n.该表达中计算过程中CA恒为0(包括中间值)的情况.根据所求可推得.1-10: 31-100: 3*41- ...

  8. 【HDOJ】1341 Simple Computers

    注意PC要与31. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 40 ...

  9. 【HDOJ】1497 Simple Library Management System

    链表. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXM 1001 #def ...

随机推荐

  1. 旧书重温:0day2【1】 简单的缓冲区溢出案例

    0x01 准备: VMwarePlayer (我是在360软件管家那搜到的下载的) xp sp2 http://user.qzone.qq.com/252738331/blog/1357138598 ...

  2. Scrum&Kanban在移动开发团队的实践 (二)

    Scrum&Kanban在移动开发团队的实践系列: Scrum&Kanban在移动开发团队的实践 (一) Scrum&Kanban在移动开发团队的实践 (二) 在第一篇分享文章 ...

  3. erl0008 - unicode 和 utf-8之间的关系

    转载:http://blog.jobbole.com/84903/ 原文出处: 卢钧轶   欢迎分享原创到伯乐头条 本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧. 背景:字符集 ...

  4. 【英语】Bingo口语笔记(40) - [aʊ]的发音规则

    [aʊ]的发音规则 先发音标的音再去拼出单词的读音down

  5. [转] 接触C# 反射 2

    逆心 原文 反射基础,2013-4. 反射用于在程序运行过程中,获取类里面的信息或发现程序集并运行的一个过程.通过反射可以获得.dll和.exe后缀的程序集里面的信息.使用反射可以看到一个程序集内部的 ...

  6. hibernate的组成部分

    持久化类 实现对应的序列化接口 必须有默认的构造函数 持久化类的属性不能使用关键字 标示符 映射文件 类型 java类型和hibernate类型 主键的产生器 increment identity a ...

  7. 从SVN导出指定版本号之间修改的文件(转)

    从SVN导出指定版本号之间修改的文件(转)   当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他没有修改过的文 ...

  8. bzoj1833 digit

    这道题其实挺水,只是写的时候需要想清楚.我的方法是: 1.将[a,b]转化为[0,b+1)-[0,a) 2.预处理出非0的v在区间[0,10^p)出现次数以及0在区间[0,10^p)出现数 3.将一个 ...

  9. Windows下安装GTK+

    Step 1:到GTK官方网站上下载安装包.有32位的和64位,64位的有这句: Note that these 64-bit packages are experimental. Binary co ...

  10. 凸包稳定性判断:每条边上是否至少有三点 POJ 1228

    //凸包稳定性判断:每条边上是否至少有三点 // POJ 1228 #include <iostream> #include <cstdio> #include <cst ...