首页 > 代码库 > cf386(div2)大一狗ACM之路

cf386(div2)大一狗ACM之路

#cf386(div2)总结#
前两题很顺利的做了出来, c题扔了, D题wrong了5发才A掉。
A题签到题, 但是想多了, 代码写的有点长了。 找被整除最小值*7。
B题 读题读了一会, 读完了就有思路了, 1A。 字符串问题, 从后往前两个两个的放到新的字符串里, 一个从最左, 一个从最右, 模拟指针扫着放, 最后特判会不会扫到一起。
C题跳了没看, 最后做完了D题回来看了一眼没什么思路 日后再说。
D题, 恩。。 两个多小时都用在这题上面了, 20分钟的时候做完了B之后就一直再啃D题, 暴力判断啊啊啊啊, 各种判断。

首先判断行不行, 我是看把多的按照k个分分的组能不能用少的隔开。

之后循环输出, B还是G, 看单租里面超过k个没有, 少的剩下的能不能把多的剩下的分组, 能的话就输出少的, 不能的话结束这一组的循环, 还要考虑G B 的总个数。  最后附上代码, 表达能力好差啊。。。。

 

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 using namespace std;
 7 int n, g, b, k;
 8 bool flag;
 9 int contg, contb;
10 int sumg, sumb;
11 int tem;
12 int Max, Min;
13 int cont;
14 int main()
15 {
16     scanf("%d %d %d %d", &n, &k, &g, &b);
17     Max = max(g, b);
18     Min = min(g, b);
19     int x, y;
20     x = g, y = b;
21     cont = (Max + k - 1) / k;
22     if(Min + 1 >= cont) flag = true;
23     if(flag)
24     {
25         while(cont > 0)
26         {
27             if(x > y)
28             {
29                 if(g - k >= 0)
30                 {
31                     for(int i = 1; i <= k; i++)
32                     {printf("G");tem++;}
33                     g -= k;
34                 }
35                 else 
36                 {
37                     for(int i = 1; i <= g; i++)
38                         {printf("G");tem++;}
39                         g = 0;
40                 }
41                 cont--;
42                 int ans = 0;
43                 while(b >= cont && ans < k && tem < n)
44                 {
45                     printf("B");
46                     ans++;
47                     b--;
48                     tem++;
49                 }
50             }
51             else 
52             {
53                 if(b - k >= 0)
54                 {
55                     for(int i = 1; i <= k; i++)
56                     {printf("B");tem++;}
57                     b = b -k;
58                     }
59                 else 
60                 {
61                     for(int i = 1; i <= b; i++)
62                         {printf("B");tem++;}
63                         b = 0;
64                 }
65                 cont--;
66                 int ans = 0;
67                 while(g >= cont && ans < k && tem < n)
68                 {
69                     printf("G");
70                     ans++;
71                     g--;
72                     tem++;
73                 }
74             }
75         }
76         printf("\n");
77     }
78     else 
79         printf("NO\n");
80     return 0;
81 }

 

 

---------------------------------------------
虽然上分了, 但是没有上青名啊啊啊啊啊, 还差2分 尴尬啊啊啊啊啊啊,看来还要在绿名里徘徊一段时间。
恩。。 至少没掉, 没掉分就是成功的第一步。
希望早日上青名 。技术分享

cf386(div2)大一狗ACM之路