1137 - Sin your life sin公式 + 枚举
生活随笔
收集整理的這篇文章主要介紹了
1137 - Sin your life sin公式 + 枚举
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.ifrog.cc/acm/problem/1137
和差化積公式,
變成2 * sin((x + y) / 2) * cos((x - y) / 2) + sin(n - (x + y))
然后很重要的一個就是cos(x) = cos(-x)
這樣,枚舉x + y的取值i,當x + y取值是i的時候,x - y的取值也是有固定的規律,具體就是
i是偶數的時候,0、2、...、這樣吧
i是奇數的時候,1、3......、這樣吧
然后就要分情況取值,
當sin((x + y) / 2)小于0,就要取一個min去和它乘,否則娶個大的,
?
數組開大了TLE,不是很懂。
#include <bits/stdc++.h> #define IOS ios::sync_with_stdio(false) using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL; double dp[2][2]; void work() {int n;scanf("%d", &n);dp[0][0] = dp[0][1] = 1;dp[1][0] = dp[1][1] = cos(0.5);double ans = -1.0;for (int i = 2; i <= n - 1; ++i) {double res = sin(i * 0.5);if (res < 0) {if (i & 1) {ans = max(ans, 2 * res * dp[1][0] + sin(n - i));} else ans = max(ans, 2 * res * dp[0][0] + sin(n - i));} else {if (i & 1) {ans = max(ans, 2 * res * dp[1][1] + sin(n - i));} else ans = max(ans, 2 * res * dp[0][1] + sin(n - i));}res = cos(i);dp[0][0] = min(dp[0][0], res);dp[0][1] = max(dp[0][1], res);dp[1][0] = min(dp[1][0], res);dp[1][1] = max(dp[1][1], res);}printf("%0.9f\n", ans); }int main() { #ifdef localfreopen("data.txt", "r", stdin); // freopen("data.txt", "w", stdout); #endifwork();return 0; }View Code
?
?
#include <bits/stdc++.h> #define IOS ios::sync_with_stdio(false) using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL; const int maxn = 3e6 + 20; double dp[maxn][2]; void work() {int n;scanf("%d", &n);dp[0][0] = dp[0][1] = cos(0);dp[1][0] = dp[1][1] = cos(0.5); // for (int i = 2; i <= n; ++i) { // dp[i][0] = min(dp[i - 2][0], cos(i * 0.5)); // dp[i][1] = max(dp[i - 2][1], cos(i * 0.5)); // }double ans = -1.0;for (int i = 2; i <= n - 1; ++i) {double res = sin(i * 0.5);if (i & 1) {ans = max(ans, 2 * res * dp[i - 2][0] + sin(n - i));} else {ans = max(ans, 2 * res * dp[i - 2][1] + sin(n - i));}res = cos(i * 0.5);dp[i][0] = min(dp[i - 2][0], res);dp[i][1] = max(dp[i - 2][1], res);}printf("%0.9f\n", ans); }int main() { #ifdef localfreopen("data.txt", "r", stdin); // freopen("data.txt", "w", stdout); #endifwork();return 0; }TLE code
?
轉載于:https://www.cnblogs.com/liuweimingcprogram/p/7101833.html
總結
以上是生活随笔為你收集整理的1137 - Sin your life sin公式 + 枚举的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 练哪只
- 下一篇: 请问《复仇者联盟3》里面那个销毁幻视头上