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. hibernate封装查询,筛选条件然后查询

    // 封装查询条件 @Test public void transmitParameter() { Map map = new HashMap<String, String>(); // ...

  2. Spark RDD操作(1)

    https://www.zybuluo.com/jewes/note/35032 RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RD ...

  3. typedef 深入剖析

    typedef是一个我们常常会用到的关键字,而这个关键字有许多陷阱或者说许多不为我们深入理解的地方.很多书上都是很简单地一笔代过,并没有真正地让我们理解这个关键字.本文对其进行详细地说明.综合网络上找 ...

  4. 计算机网络——TCP三次、四次握手详解

    三次握手:建立TCP连接 连接建立过程: B的TCP服务器进程先创建传输控制块TCB(存储了每一个连接中的一些重要信息,如:TCP连接表,到发送和接收缓存的指针,到重传队列的指针,当前的发送和接收序号 ...

  5. 中小型数据库 RMAN CATALOG 备份恢复方案(二)

    中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及N多单实例等特点.尽管如此,数据库的损失程度也会存在零丢失的情形.企业不愿意花太多的钱又要保证数据库的可靠稳定,可是苦煞了我这些搞DB的 ...

  6. delphi 中 $是什么意思 串口中使用

    delphi 中 $是什么意思? 比如:$41----$5A 意识是26个字母, 可以用$来表示? $在delphi 中还可以怎么用?1.表示16进制,$41就是65,第一个字母的ASCII值 pro ...

  7. Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104

    Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104 一.WINVER  Compile result:  WINVER not d ...

  8. HDU5804 Price List (BestCoder Round #86 A)水题

    分析:大于总和输出1 #include <cstdio> #include <cstring> #include <algorithm> using namespa ...

  9. 【LeetCode 236】Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  10. selenium python (十三)对于分页的处理

    #!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #对于web上分页的功能,一般做如下操作:    #获取总页数    # ...