timus 1095 Nikifor 3【思路】

传送门:timus 1095

题意:给出一个数字(可能是大数),其中1,2,3,4每个数至少出现一次,将大数数字重新排列,输出一个能被7整除且不以0为前缀的结果,如果没有,则输出0

思路:

利用1,2,3,4至少出现一次的信息先枚举一下他们的组合mod7的情况,因为所有整形数mod7结果只能出现7种情况

7是一个不一般的数啊 不一般体现在这里

( 10%7=3

20%7=6

30%7=2;

40%7=5;

50%7=1;

60%7=4;)

这个可以先通过写测试代码来模拟相应的结果

 int i,j,k,h,sum;
   bool map[7];  //标记是否已有满足条件的数
   char comb[7][10];
   memset(map,false,sizeof(map));
   for(i=1;i<=4;i++)
     for(j=1;j<=4;j++)
       for(k=1;k<=4;k++)
         for(h=1;h<=4;h++)
           if(i!=j&&i!=k&&i!=h&&j!=k&&j!=h&&k!=h){
              sum=i*1000+j*100+k*10+h;
			  if(map[sum%7]==false){
				  map[sum%7]=true;
				  comb[sum%7][0]=i;
				  comb[sum%7][1]=j;
				  comb[sum%7][2]=k;
				  comb[sum%7][3]=h;
				  comb[sum%7][4]='\0';
			  }
		   }
    for(i=0;i<7;i++){
       if(map[i])printf("mod7余%d:%s\n",i,comb[i]);
	   }

输出发现0~6都有对应的comb值

这说明什么?尽在不言中!

前缀不能为0,那把所有0安排在最后面

1,2,3,4每个数留一个做最后的判断,

像 11112345670

就可以先求出111567的余数,把0放到最后(嗯,看到这里应该不用再说下去了,已经显而易见该怎么弄了吧!)

是不是可以再把题目改编一下,如果输出结果是大数能被9整除呢?

(这个应该是更简单的!呼呼,比较杂乱的推理)

时间: 2024-11-13 02:14:48

timus 1095 Nikifor 3【思路】的相关文章

timus 1136 Parliament(思路过程)

该题的意思(具体可以进链接 http://acm.timus.ru/problem.aspx?space=1&num=1136 ):给出二叉树的先序遍历的顺序,输出该二叉树后序遍历的顺序(其中该二叉树的根节点大于左节点.小于右节点)! 刚看到该题目的思路是用这样的数组存储:int arr[3003][4]; arr[i][0](i>=0&&i<=3000)存储第i个数的值 arr[i][1](i>=0&&i<=3000)存储第i个数的根节点的

timus 1547. Password Search【题意思路+大数模板】

题目地址传送门:URAL 1547 这道题需要用到大数的很多模板,推荐大家去刷刷! 题目大意:Vova忘记了在Timus OJ上面的密码了,密码是由小写字母(a~z)组成的,他只知道密码长度不大于n位,现在他需要用m台数据处理器对密码进行检索,其中检索顺序需要满足字典序.比如他的密码长度不大于2,那就需要依次检索a,b,..........,y,z,aa,ab,..........,zy,zz.输出每台数据检索器的检索区间,使得总的检索效率可以达到最高. 已知密码的总可能数不少于数据处理器个数.

POJ 1095 Trees Made to Order 最详细的解题思路

题目来源:Trees Made to Order 题目大意:根据下面的规则给一棵二叉树编号: 规则1:如果二叉树为空,则编号为0: 规则2:如果二叉树只有一个节点,则编号为1: 规则3:所有含有m个节点的二叉树的编号小于所有含有m+1个节点的二叉树的编号: 规则4:如果一棵含有m个节点的二叉树(左子树为L,右子树为R)的编号为n,要想其它含有m个节点的二叉树的编号如果大于n,则需要满足两个条件中的任意一个:1.左子树的编号大于L的编号:2.左子树的编号等于L的编号,但是右子树的编号大于R的编号.

Light oj 1095 - Arrange the Numbers (组合数学+递推)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题意: 给你包含1~n的排列,初始位置1,2,3...,n,问你刚好固定前m个数中的k个数的位置,问你有多少中排列方案.(比如5 3 2有1 4 3 2 5这种方案,1和3固定了) 思路: 前m个取k个就是C(m, k)个方案.然后就是类似错排的思想,设dp[i]为i个数在初始位置各不相同.其中的组合数用逆元算出. ans = dp[m - k] * C(n - m,

Timus OJ 1057 数位dp

http://acm.timus.ru/problem.aspx?space=1&num=1057 1057. Amount of Degrees Time limit: 1.0 second Memory limit: 64 MB Create a code to determine the amount of integers, lying in the set [X;Y] and being a sum of exactlyK different integer degrees of B.

Timus : 1002. Phone Numbers 题解

把电话号码转换成为词典中能够记忆的的单词的组合,找到最短的组合. 我这道题应用到的知识点: 1 Trie数据结构 2 map的应用 3 动态规划法Word Break的知识 4 递归剪枝法 思路: 1 建立Trie字典树.方便查找, 可是字典树不是使用字符来建立的.而是把字符转换成数字.建立一个数字字典树. 然后叶子节点设置一个容器vector<string>装原单词. 2 动态规划建立一个表,记录能够在字典树中找到的字符串的前缀子串 3 假设找到整个串都在字典树中,那么就能够直接返回这个单词

timus 1242. Werewolf【队列+结构体】

题目链接http://acm.timus.ru/problem.aspx?space=1&num=1242 大致题意:村庄里有几个人不幸被害,是狼人干的!(插一句,这里可以想到一部电影<狼人>,很惊悚),现在就是需要找出可能是狼人的村民! 已知狼人不会去杀自己的祖宗,也不会杀自己的后代.狼人的父母不超过2个人!(儿女?这个不清楚). 这里给出村里人数n(编号1~n), 给出关系a b 其中a是b的子(女),b是a的父(母) 也给出被害村民的编号. 递增输出可能是狼人的村民的编号,如果没

timus 1180. Stone Game 解题报告

1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. There is a heap of N stones in front of them. Both Nikifors in turns take some stones from the heap. One may take any number of stones with the only cond

timus 1067 Disk Tree【超时代码】

题目的描述链接timus 1067 这个题目困扰了很久,后面理清思路了,解法也很明确,结果是超时! 在写代码时也收获了一些: 在把思路理好后去写代码会更顺利点,边想思路边写代码效率比较低! 先把代码放在这里,超时的代码不好说什么,以后还可以学到一些东西!第一次用new 和delete,比较怂!(2.046s>2.0s TLE) #include<iostream> #include<algorithm> using namespace std; struct Disk { i