首页 > 代码库 > 【补题】组队训练第二场 & 个人训练第一场

【补题】组队训练第二场 & 个人训练第一场

组队第二场:

C题 CodeForces Gym 100735D

题意:给你N个木棍,问他们能拼成多少个三角形。

思路:从小到大排序,然后贪心地去取。

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<vector>
 7 #include<set>
 8 #include<string>
 9 #include<sstream>
10 #include<cctype>
11 #include<map> 
12 #include<stack>
13 #include<queue>
14 using namespace std;
15 #define INF 0x3f3f3f3f
16 int gcd(int a, int b){return b==0?a:gcd(b,a%b);} 
17 
18 long long s[20];
19 bool use[20];
20 int ans = 0, N;
21 
22 int main()
23 {
24 //    freopen("input.txt", "r", stdin);
25 //    freopen("output.txt", "w", stdout);
26     memset(use, false, sizeof(use));
27     scanf("%d", &N);
28     for(int i = 0; i < N; i++)
29         scanf("%I64d", &s[i]);
30     sort(s, s + N);
31     for(int i = 0; i < N; i++)
32     {
33         if(use[i])    continue;
34         for(int j = i + 1; j < N; j++)
35         {
36             if(use[i])    break;
37             if(use[j])    continue;
38             for(int k = j + 1; k < N; k++)
39             {
40                 if(use[k])    continue;
41                 if(s[i] + s[j] > s[k])
42                 {
43                     ans++;
44                     use[i] = use[j] = use[k] = true;
45                     break;
46                 }
47                 else    break;
48             }
49         }
50     }
51     printf("%d\n", ans);
52     return 0; 
53 }
View Code

 

个人第一场:

I题 HDU 5742 乍一看题目不太想看,看到很多人AC了才发现是一道水题,果然英文是个大问题。

题意:给你n个数,已知了m个数,求(a1 + a2) / (a1 + a2 + ... + an)的最大值。

思路:除了a1, a2外,从后往前扫一遍赋最小的值就行了。可以不用结构体的,我写烦了。

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<vector>
 7 #include<set>
 8 #include<string>
 9 #include<sstream>
10 #include<cctype>
11 #include<map> 
12 #include<stack>
13 #include<queue>
14 using namespace std;
15 #define INF 0x3f3f3f3f
16 typedef long long ll;
17 int gcd(int a, int b){return b==0?a:gcd(b,a%b);} 
18 
19 struct Node{
20     int num;
21     int flag;
22 }node[105];
23 
24 int main()
25 {
26 //    freopen("input.txt", "r", stdin);
27 //    freopen("output.txt", "w", stdout);
28     int T, n, m, x, y, p, q, k;
29     scanf("%d", &T);
30     while(T--){
31         p = q = k = 0;
32         scanf("%d%d", &n, &m);
33         for(int i = 1; i <= n; i++){
34             node[i].num = 0;
35             node[i].flag = 0;
36         }
37         while(m--){
38             scanf("%d%d", &x, &y);
39             node[x].num = y;
40             node[x].flag = 1;
41         }
42         for(int i = n; i >= 3; i--){
43             if(node[i].flag)    k = node[i].num;
44             else    node[i].num = k;
45         }
46         if(!node[1].flag){
47             node[1].num = 100;
48             if(!node[2].flag)
49                 node[2].num = 100;
50         }
51         else if(!node[2].num)
52             node[2].num = node[1].num;
53         p = node[1].num + node[2].num;
54         for(int i = 1; i <= n; i++)
55             q += node[i].num;
56         int mode = gcd(p, q);
57         printf("%d/%d\n", p / mode, q / mode);
58     }
59     return 0; 
60 }
View Code

 

依旧是两道水题啊~~~

【补题】组队训练第二场 & 个人训练第一场