标签: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 }
题意:
一个精灵初始在原点,他要买樱桃,森林里有一些商人,在第一象限,且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