Codeforces Round #467 (Div. 2)

A.Olympiad

  题意:有n个人,现在给他们发证。如果给一个成绩为i的人发证,所有成绩不低于他的人都要发证;成绩为0的不能发证。问方案数。

  思路:答案为成绩不为0的不同的个数。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<set>
 4 using namespace std;
 5 int main()
 6 {
 7     int n;
 8     scanf("%d", &n);
 9     set<int>s;
10     for (int i = 1; i <= n; i++)
11     {
12         int t;
13         scanf("%d", &t);
14         if(t!=0) s.insert(t);
15     }
16     printf("%d\n", s.size());
17 
18     return 0;
19 }
View Code

 B. Vile Grasshoppers

  题意:找2~y之间不被2~p任意数除的最大数。

  思路:从y到p+1,找不被1~mIn(p,sqrt(i)+1)的数

 1 #include<iostream>
 2 #include<cmath>
 3 #include<algorithm>
 4 using namespace std;
 5 int p, y;
 6 int ok(int tmp)
 7 {
 8     for (int i = 2; i <= min(p,(int)(sqrt(tmp))+1); i++)
 9     {
10         if (tmp%i == 0) return false;
11     }
12     return true;
13 }
14 int solve()
15 {
16     for (int i = y; i > p; i--)
17     {
18         if (ok(i)) return i;
19     }
20     return -1;
21 }
22 int main()
23 {
24     scanf("%d%d", &p, &y);
25     printf("%d\n", solve());
26     return 0 ;
27 }
View Code

 C. Save Energy!

  题意:电饭锅每过k分钟自动保温,人每过d分钟检查电饭锅是否在没烧熟就保温,是则重新加热。食物如果一直加热需要t分钟,如果一直保温需要2*t分钟。问当食物刚煮熟的时间?

  思路:找到一个循环节(大于等于k的最小的d的倍数)。然后看减去所有循环节剩下的时间。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7     long long k, d, t;
 8     scanf("%I64d%I64d%I64d", &k, &d, &t);
 9     if (k%d == 0) printf("%I64d\n", t);
10     else
11     {
12         double tot_time = 0,p=0;
13         long long tmp = d*((long long)(k / d) + 1);//循环节
14         long long count = 2.0*t/(tmp+k);//1.0/(1.0*k/t+1.0*(tmp-k)/(2*t)),循环节数目
15         tot_time += count * tmp;
16         if (count*(tmp+k) + k*2>2*t)//count*(1.0*k / t + 1.0*(tmp - k) / (2 * t)) + k/t>1
17         {
18             tot_time += 1.0*(2ll*t-count*1ll*(tmp+k))/2ll;// (1.0-count*(1.0*k / t + 1.0*(tmp - k) / (2 * t)))/(1/t)
19         }
20         else
21         {
22             tot_time += k;
23             tot_time += 2ll * t - count * 1ll * (tmp + k) - k * 2;// (1.0-count*(1.0*k / t + 1.0*(tmp - k) / (2 * t))-k/t)/(1/2t)
24         }
25         printf("%.12lf\n", tot_time);
26     }
27     return 0;
28 }
View Code

 

posted @ 2018-03-15 14:36  萌萌的美男子  阅读(164)  评论(0编辑  收藏  举报