2014-11-01 15:04:00
总结:
A:英语阅读理解题。
1 /************************************************************************* 2 > File Name: a.cpp 3 > Author: Nature 4 > Mail: 564374850@qq.com 5 > Created Time: Thu 30 Oct 2014 02:01:09 PM CST 6 ************************************************************************/ 7 8 #include <cstdio> 9 #include <cstring> 10 #include <cstdlib> 11 #include <cmath> 12 #include <vector> 13 #include <map> 14 #include <set> 15 #include <stack> 16 #include <queue> 17 #include <iostream> 18 #include <algorithm> 19 using namespace std; 20 #define lp (p << 1) 21 #define rp (p << 1|1) 22 #define getmid(l,r) (l + (r - l) / 2) 23 #define MP(a,b) make_pair(a,b) 24 typedef long long ll; 25 const int INF = 1 << 30; 26 27 int n,k; 28 29 int main(){ 30 int a,b,sum = 0; 31 scanf("%d%d",&n,&k); 32 for(int i = 1; i <= n; ++i){ 33 scanf("%d%d",&a,&b); 34 sum += b - a + 1; 35 } 36 if(sum % k == 0) printf("0\n"); 37 else printf("%d\n",k - sum % k); 38 return 0; 39 }
B:将所有数排个序,要考虑
1 /************************************************************************* 2 > File Name: b.cpp 3 > Author: Nature 4 > Mail: 564374850@qq.com 5 > Created Time: Thu 30 Oct 2014 02:24:49 PM CST 6 ************************************************************************/ 7 8 #include <cstdio> 9 #include <cstring> 10 #include <cstdlib> 11 #include <cmath> 12 #include <vector> 13 #include <map> 14 #include <set> 15 #include <stack> 16 #include <queue> 17 #include <iostream> 18 #include <algorithm> 19 using namespace std; 20 #define lp (p << 1) 21 #define rp (p << 1|1) 22 #define getmid(l,r) (l + (r - l) / 2) 23 #define MP(a,b) make_pair(a,b) 24 typedef long long ll; 25 const int INF = 1 << 30; 26 27 int n,m,d; 28 int a[110 * 110]; 29 int vis[10010]; 30 31 int main(){ 32 scanf("%d%d%d",&n,&m,&d); 33 int top = n * m; 34 for(int i = 1; i <= top; ++i) 35 scanf("%d",a + i); 36 sort(a + 1,a + top + 1); 37 int flag = 1,ans2 = 0; 38 for(int i = 1; i <= top; ++i){ 39 if((a[i] - a[1]) % d){ 40 flag = 0; 41 break; 42 } 43 ans2 += abs(a[i] - a[top / 2 + 1]) / d; 44 } 45 if(flag) printf("%d\n",ans2); 46 else printf("-1\n"); 47 return 0; 48 }
C:简单构造题。。
1 /************************************************************************* 2 > File Name: c.cpp 3 > Author: Nature 4 > Mail: 564374850@qq.com 5 > Created Time: Thu 30 Oct 2014 05:53:21 PM CST 6 ************************************************************************/ 7 8 #include <cstdio> 9 #include <cstring> 10 #include <cstdlib> 11 #include <cmath> 12 #include <vector> 13 #include <map> 14 #include <set> 15 #include <stack> 16 #include <queue> 17 #include <iostream> 18 #include <algorithm> 19 using namespace std; 20 #define lp (p << 1) 21 #define rp (p << 1|1) 22 #define getmid(l,r) (l + (r - l) / 2) 23 #define MP(a,b) make_pair(a,b) 24 typedef long long ll; 25 const int INF = 1 << 30; 26 27 int n,k; 28 29 int main(){ 30 scanf("%d%d",&n,&k); 31 if(k > n || (k == 1 && n > 1)){ 32 printf("-1\n"); 33 } 34 else{ 35 if(k == 1) 36 printf("a\n"); 37 else{ 38 int len = n - k + 2,flag = 1; 39 while(len--){ 40 if(flag) printf("a"); 41 else printf("b"); 42 flag = 1 - flag; 43 } 44 for(int i = 1; i <= k - 2; ++i) 45 printf("%c",'b' + i); 46 } 47 } 48 return 0; 49 }
D:这题很有意思,首先考虑:k+1....n之间的数不能回到1....k,所以k+1...n之间的数可以取的数的范围:[k+1,n],方案数是(n-k)^(n-k),前面k个数的要求是:从任意一个点出发能回到1,(每个牌匾构造出一条边),k个点有k条边。我们发现,如果图中有环,那么环必须包含1这个点,否则不符合要求。那么我们先把1号点的出边去掉,且把边看成无向,那么图就必须是一颗生成树(k个点,(k-1)条边),根据Caley定理,n个点能构成n^(n-2)棵生成树,所以k个点k-1条边能形成k^(k-2)棵生成树。因为此时树边是无向的,而题目中的边是有向的,但是因为要让2...k点都能回到1号点,所以每条边实际上都指向根,否则不满足要求,因此我们能给每颗生成树确定唯一的方向。此时再把刚刚去掉的1号点的出边加回来,由于1号点的出边可以指向k个节点中的任意一个。所以方案数是:k*k^(k-2) = k^(k-1),最终方案数就是:k^(k-1) * (n-k)^(n-k)。
1 /************************************************************************* 2 > File Name: d.cpp 3 > Author: Nature 4 > Mail: 564374850@qq.com 5 > Created Time: Sat 01 Nov 2014 02:01:05 PM CST 6 ************************************************************************/ 7 8 #include <cstdio> 9 #include <cstring> 10 #include <cstdlib> 11 #include <cmath> 12 #include <vector> 13 #include <map> 14 #include <set> 15 #include <stack> 16 #include <queue> 17 #include <iostream> 18 #include <algorithm> 19 using namespace std; 20 #define lp (p << 1) 21 #define rp (p << 1|1) 22 #define getmid(l,r) (l + (r - l) / 2) 23 #define MP(a,b) make_pair(a,b) 24 typedef long long ll; 25 const int INF = 1 << 30; 26 const int mod = 1000000007; 27 28 int n,k; 29 30 int main(){ 31 scanf("%d%d",&n,&k); 32 ll ans = 1; 33 for(ll i = 1; i < k; ++i) ans *= k; 34 for(ll i = n - k; i >= 1; --i) ans = (ans * (n - k)) % mod; 35 printf("%I64d\n",ans); 36 return 0; 37 }