码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ2751 [HAOI2012]容易题(easy)

时间:2015-03-17 21:47:38      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

容易你全家。。。

只要把每个数能用的求和,再求积即可

用map做。。。做了半天= =

 

技术分享
 1 /**************************************************************
 2     Problem: 2751
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:452 ms
 7     Memory:5828 kb
 8 ****************************************************************/
 9  
10 #include <cstdio>
11 #include <map>
12   
13 using namespace std;
14 typedef long long ll;
15 typedef pair <int, int> P;
16 typedef map <int, ll> ::iterator IT;
17 const ll mod = 1000000007;
18 int n, m, k, X, Y;
19 ll Sum, ans, del;
20 map <P, bool> GOT;
21 map <int, ll> a;
22   
23 inline ll read(){
24     ll x = 0;
25     char ch = getchar();
26     while (ch < 0 || ch > 9)
27         ch = getchar();
28   
29     while (ch >= 0 && ch <= 9){
30         x = x * 10 + ch - 0;
31         ch = getchar();
32     }
33     return x;
34 }
35   
36 ll pow(ll x, int y){
37     ll res = 1;
38     while (y){
39         if (y & 1) res *= x, res %= mod;
40         x *= x, x %= mod;
41         y >>= 1;
42     }
43     return res;
44 }
45   
46 int main(){
47     n = read(), m = read(), k = read();
48     P pr;
49     while (k--){
50         X = read(), Y = read();
51         pr = make_pair(X, Y);
52         if (!GOT[pr])
53             GOT[pr] = 1, a[X] += Y;
54     }
55     Sum = (ll) n * (n + 1) / 2 % mod;
56     ans = 1;
57     for (IT i = a.begin(); i != a.end(); ++i){
58         del = Sum - i -> second;
59         if (del < 0) del += (ll) ((-del / mod) + 1) * mod;
60         ans *= del, ans %= mod;
61     }
62     printf("%lld\n", ans * pow(Sum, m - a.size()) % mod);
63     return 0;
64 }
View Code

 

BZOJ2751 [HAOI2012]容易题(easy)

标签:

原文地址:http://www.cnblogs.com/rausen/p/4345429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!