zoukankan      html  css  js  c++  java
  • 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
    ", ans /12/36);
    	}
    	return 0;
    }
    
  • 相关阅读:
    MYSQL 注射精华
    MySQL数据库安全配置
    linux命令
    python异常处理、反射、socket
    random、面向对象编程
    序列化、常用模块以及面向对象基础
    python 装饰器、递归原理、模块导入方式
    python递归、collections系列以及文件操作进阶
    python基础
    python简介
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6370730.html
Copyright © 2011-2022 走看看