[BNU弱校联萌]强力热身

链接:http://acm.bnu.edu.cn/v3/contest_show.php?cid=6865#info

2.5H写了三道题,后面撸C题KMP一直TLE T.T三题就三题吧……

 

A.Easy Math

灵感突现,想到“无理数与任何数的和都不可能为整数”,居然1A,真是勇气的试练。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <iomanip>
 6 #include <cmath>
 7 #include <map>
 8 #include <vector>
 9 #include <string>
10 #include <queue>
11 #include <set>
12 #include <algorithm>
13 
14 using namespace std;
15 
16 int n;
17 int tmp;
18 
19 int main() {
20     while(~scanf("%d", &n)) {
21         int flag = true;
22         for(int i = 0; i < n; i++) {
23             scanf("%d", &tmp);
24             double sq = sqrt(tmp);
25             if(int(sq) != sq) {
26                 flag = false;
27             }
28         }
29         if(flag) {
30             printf("Yes\n");
31         }
32         else {
33             printf("No\n");
34         }
35     }
36 }
A

 

B.Carries

计算两两和有多少个进位。卡在了mod取10^9的时候会爆int,无数次WA…

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <iomanip>
 6 #include <cmath>
 7 #include <map>
 8 #include <vector>
 9 #include <string>
10 #include <queue>
11 #include <set>
12 #include <algorithm>
13 
14 using namespace std;
15 
16 typedef long long LL;
17 const int maxn = 1000010;
18 int n;
19 int a[maxn];
20 int h[maxn];
21 
22 int main() {
23     // freopen("in", "r", stdin);
24     while(~scanf("%d", &n)) {
25         memset(h, 0, sizeof(h));
26         for(int i = 0; i < n; i++) {
27             scanf("%d", &a[i]);
28         }
29         LL ans = 0;
30         for(LL mod = 10; mod <= 1000000000; mod*=10) {    //no more than 10^9
31             for(int i = 0; i < n; i++) {
32                 h[i] = a[i] % mod;
33             }
34             sort(h, h+n);
35             int m = n - 1;
36             for(int i = 0; i < n; i++) {
37                 while(i < m && h[i] + h[m] >= mod) {
38                     m--;
39                 }
40                 ans += min(n-i-1, n-m-1);
41             }
42         }
43         printf("%lld\n", ans);
44     }
45 }
B

 

E.Rectangle

和某微软笔试一样,确定一边暴力枚举另一边。 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <iomanip>
 6 #include <cmath>
 7 #include <map>
 8 #include <vector>
 9 #include <string>
10 #include <queue>
11 #include <set>
12 #include <algorithm>
13 
14 using namespace std;
15 
16 typedef long long LL;
17 LL n, m, k;
18     
19 int main() {
20     // freopen("in", "r", stdin);
21     while(~scanf("%lld %lld %lld", &n, &m, &k)) {
22         LL ans = 0;
23         k /= 2;
24         LL a, b;
25         for(LL i = 1; i <= n; i++) {
26             if(k < i) {
27                 break;
28             }
29             LL tmp = min(k-i, m);
30             a = n - i + 1;
31             b = (m + (m - tmp + 1)) * tmp / 2;
32             ans += a * b;
33         }
34         printf("%lld\n", ans);
35     }
36 }
E

 

 

补题ing……

posted @ 2015-10-02 00:48  Kirai  阅读(189)  评论(0编辑  收藏  举报