• hdu_1006 Tick and Tick(暴力模拟)


    hdu1006

    标签(空格分隔): 暴力枚举


    • 好久没有打题了,退队了有好几个月了,从心底不依赖那个人了,原来以为的爱情戏原来都只是我的独角戏。之前的我有时候好希望有个人出现,告诉自己去哪里,做什么,哪种仅仅是渴望被爱的感觉都很美好,大概是因为离开了acm也不再依赖他所以现在我自己告诉自己,自己要去哪里,做什么,突然感觉很踏实,也不那么累了。现在我想把之前没有做好的做好,虽然我已经失去了最好的时机,但还是要在最忙的时间里抽出来做一些曾经有所遗憾的事情。

    • 不多说了,上题!
      开始推了半天公式,发现这个题要暴力模拟
      其实是很简单的,要踏踏实实地反复去读条件,想清楚指针转动的情况就很简单了

        /*  秒针的速度s=6°/s,分针是m=1/10°/s,时针是h=1/120°/s;
        	相对速度s_m=59/10°/s,s_h=719/120°/s,m_h=120/11°/s;
        	所以相差一度所需要的时间sm=10/59 s/°,sh=120/719 s/°,mh=120/11 s/°;
    	差360°的周期为cycle_sm=3600/59 s,cycle_sh=43200/719 s,cycle_mh=43200/11 s;
    	假设开始时从12点整开始,旋转至再均回到12点(即时针转一圈)
        */
        double max(double a,double b,double c){
        	return a>b?(a>c?a:c):(b>c?b:c);}
    
        double min(double a,double b,double c){
    	return a<b?(a<c?a:c):(b<c?b:c);}
    
        #include <stdio.h>
        int main()
        {
    	double d;
    	double cycle_sm=3600./59.;
    	double cycle_sh=43200./719.;
    	double cycle_mh=43200./11.;//这三行是时针、分针、秒针两两相遇的周期
    	double sum;
    	double happys,happye;//开始happy和结束happy的时刻
    	double sm=10./59.,sh=120./719.,mh=120./11.;//相差一度所需要的时间
    	double d_sm,d_sh,d_mh,not_d_sm,not_d_sh,not_d_mh;//表示相差d°及以上的时刻和不再相差d°及以上的时刻
    
    	while(scanf("%lf",&d)!=EOF&&d!=-1)
    	{
    		sum=0;
    		d_sm=sm*d; not_d_sm=cycle_sm-d_sm;
    		d_sh=sh*d; not_d_sh=cycle_sh-d_sh;
    		d_mh=mh*d; not_d_mh=cycle_mh-d_mh;
    
    		happys=max(d_sm,d_sh,d_mh);
    		happye=min(not_d_sm,not_d_sh,not_d_mh);
    
    		while(happys<=43200&&happye<=43200)//43200是时针针转一圈的秒数
    		{
    			happys=max(d_sm,d_sh,d_mh);//两两之间最后一个满足相差d°及以上的条件视为开始happy时刻
    			happye=min(not_d_sm,not_d_sh,not_d_mh);//两两之间第一个不再满足相差d°及以上视为结束happy的时刻
    
    			if(happys<happye)
    				sum+=happye-happys;//如果end的时间比start的晚,由sum记录并累积
    
    			if(happye==not_d_sm)
    			{d_sm+=cycle_sm;not_d_sm+=cycle_sm;}
    			else if(happye==not_d_sh)
    			{d_sh+=cycle_sh;not_d_sh+=cycle_sh;}
    			else if(happye==not_d_mh)
    			{d_mh+=cycle_mh;not_d_mh+=cycle_mh;}//happy时间end后最慢的指针要提前一个周期才能让比它快的再次追上
    		}
    		printf("%.3lf
    ",sum/43200*100);
    	}
    	return 0;
    }
    
    

  • 相关阅读:
    [esp8266]RAM不足问题,导致重启
    在windows上使用ubuntu(非虚拟机模式)
    [RPAPython]自动化脚本入门使用1
    交叉编译openmv源码(ubuntu)
    springboot bean的生命周期
    转,记一次freessl免费ssl证书申请
    使用httpproxymiddleware中间件代理请求实现跨域方法
    win7 node 高版本 问题
    js JavaScript 对象属性特征 访问器 set get setter getter 红宝书第四版
    windows 环境变量 编辑工具
  • 原文地址:https://www.cnblogs.com/shanyr/p/6435540.html
Copyright © 2020-2023  润新知