POJ 3761 not(思路+想法) 题

View Code
 1 //Result:wizmann    3761    Accepted    8576K    547MS    G++    912B
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <iostream>
 7 
 8 using namespace std;
 9 
10 #define print(x) cout<<x<<endl
11 #define input(x) cin>>x
12 #define K 1000010
13 #define MOD 20100713
14 
15 long long mul[K];
16 
17 void init()
18 {
19     mul[0]=1;
20     for(int i=1;i<K;i++)
21     {
22         mul[i]=(mul[i-1]*i)%MOD;
23     }
24 }
25 
26 long long fastmod(long long a,long long b)//return (a^b)%MOD
27 {
28     if(b==0) return 1;
29     else if(b==1) return a%MOD;
30     else
31     {
32         long long t=fastmod(a,b/2);
33         t=(t*t)%MOD;//WA here,do MOD every step if possible
34         if(b&1) return (t*a)%MOD;
35         else return t;
36     }
37 }
38 
39 /*
40  * 由冒泡排序的性质,每一次排序,对于每一个数x来说,逆序性质d(x)=d(x)-1
41  * 所以K=max(foreach d(x))
42  * 
43  * 对于最小的数p,若使其逆序性质小于等于K,则有K+1种放置方法
44  * 对于次小数q,若同上,对于(2~N)数列,也有K+1种放置方法
45  * 所以方法数为(k+1)^(n-k),又由于k个数可以自由排列,乘上k!
46  * 得到结果F(n,k),即n个数,用少于K次排序可以完成的排列数
47  * 
48  * 所以我们最终的答案就是F(n,k)-F(n,k-1)
49  * 优化后的式子为long long res=mul[k]*(fastmod(k+1,n-k)-fastmod(k,n-k));
50  * 
51  * 总结:这玩意真不是人想的。。。- -。。。
52  * By Moody _"Kuuy"_ Wizmann @ 3^Nokia
53  * 
54  * 2012-5-12 00:53AM
55  * 
56  * I love Lisa.么么哒~
57  */
58 
59 
60 
61 long long slove(int n,int k)
62 {
63     //printf("%lld %lld %lld\n",fastmod(k+1,n-k),fastmod(k,n-k),mul[k]);
64     long long res=mul[k]*(fastmod(k+1,n-k)-fastmod(k,n-k));
65     res%=MOD;
66     return res<0?res+MOD:res;
67 }
68 
69 int main()
70 {
71     init();
72     int T,a,b;
73     input(T);
74     while(T--)
75     {
76         scanf("%d%d",&a,&b);
77         print(slove(a,b));
78     }        
79     return 0;
80 }

转载于:https://www.cnblogs.com/Wizmann/archive/2012/05/12/2496860.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值