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

第十一届山东省大学生程序设计竞赛(热身赛)

时间:2021-05-24 02:10:21      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:iostream   first   相等   学生   贪心   精灵   map   string   print   

B.Willis and Fibonacci Sequence

题意:

n的范围是10^9,f[i]是斐波那契数列,求f[i] / 2^n 的前n项和

思路:(打表)(精度)

打表,打表出前100项的答案,因为指数增长比斐波那契数列增长速度大得多,这个题的精度只有10^-6,最后发现第72项以后的答案都是2.000000,最后特判一下n等于1和2的情况直接输出

 1 #include <iostream>
 2 #include <cmath>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     double f[110];
 9     
10     int n;
11     cin >> n;
12     
13     if(n == 1) printf("0.500000");
14     else if(n == 2) printf("0.750000");
15     else if(n >= 72) printf("2.000000");
16     else 
17     {
18         f[1] = 1 , f[2] = 1;
19         double sum = 0.75;
20         for(int i = 3 ; i <= n ; i ++ )
21         {
22             f[i] = f[i - 1] + f[i - 2];
23             sum += 1.0 * f[i] / pow(2 , i);
24         }
25         printf("%.6lf\n" , sum);
26     }
27     
28     return 0;
29 }

 

C.Mika with Cherry Cake

题意:

一个精灵初始在原点,他要买樱桃,森林里有一些商人,在第一象限,且x y坐标均大于等于1,现给出这些商人的坐标和他们移动的方向,问若精灵和商人的速度相等的话,精灵最多能买到多少樱桃

思路:(贪心)(曼哈顿距离)

首先,因为都在第一象限,且精灵和商人的速度相等,所以,若商人向上走或者向右走,那精灵肯定追不上商人,那么我们就只需考虑商人向左和向下走的情况,而向下走时,如果y小于x,

那么当商人走到x轴时,因为精灵需要走的x更大,所以精灵还没走到商人的位置,那么精灵还是没法和商人相遇,同理向左走,若x小于y也无法相遇。

然后我们再考虑可以相遇的情况,首先我们按贪心的思想把所有的商人按x + y的值从小到大排序,因为我们要求精灵最多可以遇到商人的数量,所以我们先定义一个时间t,情况1:当这个商人向下走时,

此时若满足y - t >= x,则满足一种情况,答案数加一。情况2:当这个商人向左走时,此时若满足x - t >= y,则满足一种情况,答案数加一。每次情况满足时,因为精灵要回到原点,所以时间t更新成x + y。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <algorithm>
 5 #include <cmath>
 6 #include <queue>
 7 #include <vector>
 8 #include <map>
 9 #include <set>
10 
11 #define x first
12 #define y second
13 
14 using namespace std;
15 
16 typedef long long LL;
17 typedef pair<int, int>PII;
18 
19 vector <PII> v;
20 
21 bool cmp(PII a, PII b)
22 {
23     return a.x + a.y < b.x + b.y;
24 }
25 
26 int main()
27 {
28     int n;
29     cin >> n;
30     for (int i = 0; i < n; i++)
31     {
32         int x, y, dir;
33         cin >> x >> y >> dir;
34         if (dir == 1 || dir == 3) continue;
35         else if ((dir == 2 && y < x) || (dir == 4 && x < y)) continue;
36 
37         else
38         {
39             if (dir == 2) v.push_back({ y , x });
40 
41             if (dir == 4) v.push_back({ x , y });
42         }
43     }
44     sort(v.begin(), v.end(), cmp);
45 
46     int t = 0, cnt = 0;
47     for (auto p : v)
48         if (p.x - t >= p.y)
49         {
50             cnt++;
51             t = p.x + p.y;
52         }
53 
54     cout << cnt << endl;
55 
56     return 0;
57 }

 

第十一届山东省大学生程序设计竞赛(热身赛)

标签:iostream   first   相等   学生   贪心   精灵   map   string   print   

原文地址:https://www.cnblogs.com/yctql/p/14746261.html

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