日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu1006 Tick and TIck

發布時間:2024/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu1006 Tick and TIck 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定9個int,
beg1 end1 T1
beg2 end2 T2
beg3 end3 T3

三盞燈周期性亮滅,T表示燈的周期,beg,end表示燈變亮的時間和變滅的時間,beg和end都小于T。
再給定一個時間t0,問在t0時間內三盞燈同時亮著的總時間有多長。

這個問題描述起來何其簡單,可是編程難道只能模擬嗎?難道就沒有一個統一的、完美的、簡潔的數學表達式嗎?

#include<stdio.h> #include<iostream> #include<stdlib.h> #include<math.h> #include<algorithm> #include<string.h> using namespace std; double pi = acos(-1.0); //v表示三根針的角速度 double v[] = { 2 * pi / (12 * 3600), 2 * pi / (3600), 2 * pi / 60 }; //w表示三根針的相對角速度 double w[] = { v[1] - v[0], v[2] - v[0], v[2] - v[1] }; //周期長度 double T[3]; //角度開始時間和結束時間 double beg[3], over[3]; //當前三個條件是否滿足 bool flag[3]; //當前三條曲線各自的周期 int zhouqi[3]; //三條曲線的下一時間 double nex[3]; int main(){ freopen("in.txt", "r", stdin);for (int i = 0; i < 3; i++){T[i] = 2 * pi / w[i];}double x;while (cin >> x&&x != -1){x = x / 180 * pi;double ans = 0;for (int i = 0; i < 3; i++){beg[i] = x / w[i];over[i] = T[i] - beg[i];nex[i] = beg[i];}memset(flag, 0, sizeof(flag));memset(zhouqi, 0, sizeof(zhouqi));double t = 0;while (true){int mi = 0;for (int i = 1; i < 3; i++){if (nex[i] < nex[mi]){mi = i;}}double next_t = min(nex[mi], 12.0 * 3600);if (flag[0] && flag[1] && flag[2]){ans += next_t - t;}t = next_t;if (t >= 12 * 3600)break;if (flag[mi]){flag[mi] = false;zhouqi[mi]++;nex[mi] = beg[mi] + zhouqi[mi] * T[mi];}else{flag[mi] = true;nex[mi] = over[mi] + zhouqi[mi] * T[mi];}}printf("%.3lf\n", ans /12/36);}return 0; }

總結

以上是生活随笔為你收集整理的hdu1006 Tick and TIck的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。