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

BUCT蓝桥杯热身赛II题解

时间:2014-11-30 21:16:33      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

A题 编码(decode)

签到题,没有可说的。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <set>
 5 
 6 using namespace std;
 7 
 8 int main () {
 9     int mark[26];
10     memset(mark,0,sizeof(mark));
11     string child,goal;int N;
12     cin >> child >> N >> goal;
13     set<int>s;
14     for (int i = 0;i < child.length();i++) {
15         mark[(N - 1 + i) % 26] = child[i];
16         s.insert(child[i]);
17     }
18     int pos = N - 1 + child.length();
19     for (int i = A;i <= Z;i++) {
20         if (s.count(i)) continue;
21         pos %= 26;
22         s.insert(i);
23         mark[pos] = i;
24         pos++;
25     }
26     for (int i = 0;i < goal.length();i++) {
27         for (int j = 0;j < 26;j++) {
28             if (goal[i] == mark[j]) cout << char(j + A);
29         }
30     }
31 }
View Code

 

B题 阶乘问题(fact)

水题,不多说。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 int a[4] = {6,2,4,8};
 8 
 9 int get_five(int n) {
10     if (n == 0) return 0;
11     return n / 5 + get_five(n / 5);
12 }
13 
14 int jie(int n) {
15     if (n == 0) return 1;
16     else return n * jie(n - 1);
17 }
18 
19 int f(int n) {
20     if (n == 0) return 1;
21     int a0 = n % 5;
22     int j =  (n - a0) / 5;
23     return a[j % 4] * (jie(a0) % 10) * f(j) % 10;
24 }
25 
26 int main () {
27     int n;
28     while (cin >> n)
29     if (n == 1) cout << 1 << " " << 0 << endl;
30     else cout << f(n) << " " << get_five(n) << endl;
31 }
View Code

 

C题 集合(subset)

水题,没说的,set

用法

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <set>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 #define ALL(x) x.begin() , x.end()
 9 #define INS(x) inserter(x , x.begin())
10 
11 int main () {
12     set<int>s1;
13     set<int>s2;
14     int n;
15     int x;
16     cin >> n;
17     for (int i = 0;i < n;i++) {
18         cin >> x;
19         s1.insert(x);
20     }
21     cin >> n;
22     for (int i = 0;i < n;i++) {
23         cin >> x;
24         s2.insert(x);
25     }
26     if (s1 == s2) {
27         cout << "A equals B" << endl;
28     }
29     else {
30         set<int>xx;
31         set_intersection(ALL(s1),ALL(s2),INS(xx));
32         if (xx == s1) {
33             cout << "A is a proper subset of B" << endl;
34         }
35         else if (xx == s2) {
36             cout << "B is a proper subset of A" << endl;
37         }
38         else if (xx.size() == 0) cout << "A and B are disjoint" << endl;
39         else cout << "I‘m confused!" << endl;
40     }
41 }
View Code

 

D题 加工生产调度(prod)

简单贪心题,保证 x1 + max(x2,y1) + y2 < x2 + max(x1,y2) + y1

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 
 6 using namespace std;
 7 
 8 class Node {
 9 public:
10     int x,y;
11     bool operator < (const Node rhs) const {
12         return x + max(rhs.x,y) + rhs.y < rhs.x + max(x,rhs.y) + y;
13     }
14 };
15 
16 int main () {
17     int N;
18     // freopen("1.in","r",stdin);
19     cin >> N;
20     Node a[1010];
21     for (int i = 0;i < N;i++) cin >> a[i].x;
22     for (int i = 0;i < N;i++) cin >> a[i].y;
23     sort(a,a + N);
24     int start[1010];
25     int end[1010];
26     end[0] = a[0].x;
27     for (int i = 1;i < N;i++) {
28         end[i] = a[i].x + end[i - 1];
29         start[i] = end[i - 1];
30     }
31     int maxn = end[N - 1];
32     int ee = 0;
33     for (int i = 0;i < N;i++) {
34         ee = max(end[i],ee) + a[i].y;
35     }
36     cout << ee << endl;
37 }
View Code

 

E题 帕斯卡的旅行(tour)

简单DP题 dp[i][j] 表示从起点到点(i,j)的路径数,所以结果是dp[n - 1][m - 1];

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 long long dp[35][35];
 8 int a[35][35];
 9 
10 int main () {
11     int n;
12     // freopen("1.in","r",stdin);
13     cin >> n;
14     char ch;
15     for (int i = 0;i < n;i++) {
16         for (int j = 0;j < n;j++) {
17             cin >> ch;
18             a[i][j] = ch - 0;
19         }
20     }
21     memset(dp,0,sizeof(dp));
22     dp[0][0] = 1;
23     for (int i = 0;i < n;i++) {
24         for (int j = 0;j < n;j++) {
25             if (a[i][j] == 0) continue;
26             if (i + a[i][j] < n) {
27                 dp[i + a[i][j]][j] += dp[i][j];
28             }
29             if (j + a[i][j] < n) {
30                 dp[i][j + a[i][j]] += dp[i][j];
31             }
32         }
33     }
34     cout << dp[n - 1][n - 1] << endl;
35 }
View Code

 

F题 泡泡龙(pop) 

水题,简单模拟,广搜一下。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 
 6 using namespace std;
 7 
 8 int dir[4][2] = {-1,0,0,1,1,0,0,-1};
 9 int mark[110][110];
10 int a[110][110];
11 int m,n;
12 
13 void BFS(int x,int y) {
14     int ans = a[x][y];
15     a[x][y] = 0;
16     queue<pair<int,int> > Q;
17     Q.push(make_pair(x,y));
18     while (!Q.empty()) {
19         pair<int,int> now = Q.front();Q.pop();
20         for(int i = 0;i < 4;i++) {
21             int xx = now.first + dir[i][0];
22             int yy = now.second + dir[i][1];
23             if (xx >= 0 && xx <= n && yy >= 0 && yy < n && a[xx][yy] == ans) {
24                 a[xx][yy] = 0;
25                 Q.push(make_pair(xx,yy));
26             }
27         }
28     }
29 }
30 
31 int main () {
32     cin >> n >> m;
33     for (int i = 0;i < n;i++) {
34         for (int j = 0;j < n;j++) {
35             cin >> a[i][j];
36         }
37     }
38     BFS(n - 1,m - 1);
39     for (int j = 0;j < n;j++) {
40         int pos = n - 1;
41         for (int i = n - 1;i >= 0;i--) {
42             if (a[i][j] != 0) {
43                 a[pos][j] = a[i][j];
44                 pos--;
45             }
46         }
47         for (int i = 0;i <= pos;i++) {
48             a[i][j] = 0;
49         }
50     }
51     for (int i = 0;i < n;i++) {
52         for (int j = 0;j < n;j++) {
53             cout <<  a[i][j] << " ";
54         }
55         cout << endl;
56     }
57 }
View Code

 

G题卫星照片(satel)

水题,跟某年的NOIP统计细胞很像,随便广搜一下就搞定了。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 
 6 using namespace std;
 7 
 8 string str[80];
 9 int dir[4][2] = {-1,0,0,1,1,0,0,-1};
10 int visit[80][80];
11 int row,col;
12 int oxnum = 0;
13 int roomnum = 0;
14 
15 class Node {
16     public:
17         int x,y;
18         Node (int xx,int yy) {
19             x = xx;
20             y = yy;
21         }
22 };
23 
24 void bfs(int x,int y) {
25     queue<Node> Q;
26     Q.push(Node(x,y));
27     while (!Q.empty()) {
28         Node now = Q.front();Q.pop();
29         visit[now.x][now.y] = 1;
30         for (int i = 0;i < 4;i++) {
31             int xx = now.x + dir[i][0];
32             int yy = now.y + dir[i][1];
33             if (xx >= 0 && xx < row && yy >= 0 && yy < col && str[xx][yy] == #) {
34                 str[xx][yy] = !;
35                 Q.push(Node(xx,yy));
36             }
37         }
38     }
39 }
40 
41 int cover(int x,int y) {
42     int rowbegin = x,colbegin = y;
43     int i;
44     for (i = x;i < row;i++) {
45         if (str[i][y] != !) break;
46     }
47     int rowend = i;
48     for (i = y;i < col;i++) {
49         if (str[x][i] != !) break;
50     }
51     int colend = i;
52     int ok = 1;
53     for (i = rowbegin;i < rowend;i++) {
54         for (int j = colbegin;j < colend;j++) {
55             if (str[i][j] != !) {
56                 return 0;
57             }
58         }
59     }
60     for (i = 0;i < row;i++) {
61         for (int j = 0;j < col;j++) {
62             if (visit[i][j]) {
63                 if (i < rowbegin || j < colbegin || i >= rowend || j >= colend) return 0;
64             }
65         }
66     }
67     return 1;
68 }
69 
70 int main () {
71     // freopen("1.in","r",stdin);
72     cin >> row >> col;
73     getchar();
74     for (int i = 0;i < row;i++) {
75         cin >> str[i];
76     }
77     for (int i = 0;i < row;i++) {
78         for (int j = 0;j < col;j++) {
79             if (str[i][j] == #) {
80                 str[i][j] = !;
81                 bfs(i,j);
82                 if (cover(i,j)) roomnum ++;
83                 else oxnum ++;
84                 memset(visit,0,sizeof(visit));
85             }
86         }
87     }
88     cout << roomnum << endl << oxnum << endl;
89 }
View Code

 

BUCT蓝桥杯热身赛II题解

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/xiaoshanshan/p/4120962.html

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