hdu 1755 数学 ***

链接:点我

题解可以看这里:点我这里

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define N 50005
 5 #define LL __int64
 6
 7 using namespace std;
 8
 9 LL st[N],total,h[15],n,flag[15];
10 LL Dp[105][105],m;
11
12 void Dfs(int x,LL num)//递归求所有的组合
13 {
14     if(x>=n)
15     {
16         st[total++]=num;
17         return;
18     }
19     int i,k=-1;
20     if(num==0)k=0;
21     for(i=0;i<n;i++)
22     {
23         if(!flag[i] && h[i]!=k)
24         {
25             flag[i]=1;
26             Dfs(x+1,num*10+h[i]);
27             flag[i]=0;
28             k=h[i];
29         }
30     }
31 }
32
33 void make()
34 {
35     int i,j,k;
36     for(i=0;i<n;i++)
37     {
38         flag[i]=0;
39         scanf("%I64d",&h[i]);
40     }
41     sort(h,h+n);//排序
42     total=0;
43     Dfs(0,0);
44     memset(Dp,-1,sizeof(Dp));//初始化
45     for(i=0;i<total;i++)
46     {
47         for(j=1;j<=100;j++)
48         {
49             k=st[i]%j;
50             if(Dp[j][k]==-1 || Dp[j][k]>st[i])
51             {
52                 Dp[j][k]=st[i];//预处理
53             }
54         }
55     }
56     LL x,y;
57     while(m--)//询问
58     {
59         scanf("%I64d%I64d",&x,&y);
60         if(y==1)printf("%I64d\n",Dp[1][0]);
61         else
62         {
63             x%=y;
64             x=y-x;//互补
65             if(x==y)x=0;
66             if(Dp[y][x]==-1)printf("None\n");
67             else printf("%I64d\n",Dp[y][x]);
68         }
69     }
70 }
71 int main()
72 {
73     while(scanf("%I64d%I64d",&n,&m)==2)
74     {
75         make();
76     }
77     return 0;
78 }
时间: 2024-10-04 06:06:58

hdu 1755 数学 ***的相关文章

hdu 4961 数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=4961 先贴个O(nsqrtn)求1-n所有数的所有约数的代码: vector<int>divs[MAXN]; void caldivs() { for(int i=1;i<MAXN;i++) for(int j=i;j<MAXN;j+=i) divs[j].push_back(i); } 有了这个当时理下思路就可写了,但是重复数处理注意: 1.用一个数组vis[]  vis[i]=1表示i存在

ACM HDU 1755 -- A Number Puzzle

A Number Puzzle Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 938    Accepted Submission(s): 276 Problem Description Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间.这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写

HDU 5976 数学,逆元

1.HDU 5976 Detachment 2.题意:给一个正整数x,把x拆分成多个正整数的和,这些数不能有重复,要使这些数的积尽可能的大,输出积. 3.总结:首先我们要把数拆得尽可能小,这样积才会更大(当然不能拆1).所以容易想到是拆成2+3+...+n+s=x,先求出n即2+3+...+n<x<2+3+...+n+(n+1),然后将某个数向右平移s个单位变为n+1即可.注意:(1)预处理出前缀和,前缀积.(2)将某个数移到n+1,要除这个数再乘n+1,这里要用逆元,也要预处理出来. #in

*HDU 2451 数学

Simple Addition Expression Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1723    Accepted Submission(s): 675 Problem Description A luxury yacht with 100 passengers on board is sailing on the s

hdu 4811 数学 不难

http://acm.hdu.edu.cn/showproblem.php?pid=4811 因为看到ball[0]>=2 && ball[1]>=2 && ball[2]>=2  ans=(sum-6)*6+15    sum是三种颜色的球个数的和,然后就想到分类讨论,因为情况是可枚举的, 发现整数如果不加LL直接用%I64d打印会出问题 //#pragma comment(linker, "/STACK:102400000,102400000

[ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂

从今天开始就有各站网络赛了 今天是ccpc全国赛的网络赛 希望一切顺利 可以去一次吉大 希望还能去一次大连 题意: 很明确是让你求Sn=[a+sqrt(b)^n]%m 思路: 一开始以为是水题 暴力了一发没过 上网看了一下才知道是快速幂 而且特征方程的推导简直精妙 尤其是共轭相抵消的构造 真的是太看能力了 (下图转自某大神博客) 特征方程是C^2=-2*a*C+(a*a-b) 然后用快速幂求解 临时学了下矩阵快速幂 从这道题能看出来 弄ACM真的要数学好 这不是学校认知的高数 线代 概率分数 而

hdu 4506(数学,循环节+快速幂)

小明系列故事——师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 5427    Accepted Submission(s): 1461 Problem Description 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹.这 不,班

hdu 5399(数学推理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5399: 题意: 给你m个函数f1,f2,?,fm:{1,2,?,n}→{1,2,?,n}(即所有的x∈{1,2,?,n},对应的f(x)∈{1,2,?,n}),已知其中一部分函数的函数值,问你有多少种不同的组合使得所有的i(1≤i≤n),满足f1(f2(?fm(i)))=i 对于函数集f1,f2,?,fm and g1,g2,?,gm,当且仅当存在一个i(1≤i≤m),j(1≤j≤n),fi(j)≠

hdu 4432 数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=4432 6分钟写的代码,一上午去调试,, 哎,一则题目没看懂就去写了,二则,哎,,恶心了,在坚持几天然后ACM退役,想当初一直想着regional拿奖,然后在保研的时候有个更漂亮的简历,卧槽,但是,其实喜欢的是静下心,把一块知识好好弄懂,看着自己一点点由不会到会,由不熟到熟练,而且在这个过程中总结一些思考问题的方法,能把这种思维应用于其他 但是----唉,急功近利式地学,老想着快,一没思路就去看题解,然后平均每