妖梦费了好大的劲为幽幽子准备了一个大西瓜,甚至和兔子铃仙打了一架。现在妖梦闲来无事,就蹲在一旁看幽幽子吃西瓜。西瓜可以看作一个标准的球体,瓜皮是绿色的,瓜瓤是红色的,瓜皮的厚度可视为0。妖梦恰好以正视的角度看着这个西瓜。幽幽子是一个吃货,妖梦一走神,自己背后的刀就不见了,而西瓜也被切掉了一块。幽幽子切西瓜时刀面始终垂直于桌面,并且切下的一块在俯视图中正好是一个以西瓜中心为顶点,半径为西瓜半径的扇形。如图所示,是一种满足条件的情况

俯视:

正视:

妖梦看着红红绿绿的西瓜,忽然陷入思考,红色的西瓜瓤占整个西瓜可视面积的百分之多少呢?但她对几何一窍不通,于是想问问幽幽子,但幽幽子正抱着切下来的西瓜大吃特吃,没有理会妖梦。于是她想让你来帮她解决这个问题。

为了方便描述问题,我们为俯视图建立一个平面极坐标系,极点在俯视图圆形(扇形)的正中央,极轴方向竖直向下。极轴所对应的角度为0度,角度逆时针依次增加,直到转一圈又回到极轴。因此角度范围是[0,360)。幽幽子会切掉西瓜从a°到b°的这一整块。

输入输出格式

输入格式:

第一行一个整数T,表示数据组数。

接下来T行每行两个整数a,b。表示切掉范围的起始角度和终止角度。若a>b,则切掉的角度为[a,360)∪[0,b]这一范围。

输出格式:

T行,每行一个实数后跟一个百分号“%”,表示被切掉一部分的西瓜的正视图(平行投影)中,红色的西瓜瓤占西瓜总可视面积的百分比。在此题中,妖梦的视野方向平行于俯视图的极轴,并且极轴射线指向妖梦。

输出的实数四舍五入保留一位小数,你的答案被判作正确,当且仅当与标准答案完全相同。

输入输出样例

输入样例#1:

2
90 270
315 45
输出样例#1:

0.0%
70.7%

说明

样例说明:

第一个样例中,切掉的西瓜恰好在背面,在妖梦的角度看起来与未切过的西瓜并无区别,因此输出0%。第二个样例中,切掉了从315°~45°这一部分,经过计算,得到答案为sqrt(2)/2,化成小数得到0.707,即70.7%

本题目共有10个测试点。

对于第1个测试点,a,b∈{0,90,180,270}。

对于第2个测试点,270<=a<=359,0<=b<=90。

对于第3,4个测试点,180<=a<=359,0<=b<=179。

对于全部测试点,0<=a,b<=359,a≠b。

1<=T<=10000

PS:本题实在太玄。。。

首先,要看懂题目的意思,题目就是说给你一个西瓜,给出俯视图,并在俯视图上向瓜心方向切2刀,每一刀的距离都是瓜的半径。要你求出,在正视图中,红色的面积是正视图

面积的多少。

出题者很友善地给出了部分特殊情况,那我们一起来分析下:

10%:

由于a,b∈{0,90,180,270},我们可以全用来特判;

20%(10%+10%):

由于270<=a<=359,0<=b<=90,说明正视图的总面积是π*r*r。那么,我们只需求出红色的总面积,具体见下;

40%(10%+10%+20%):

这种情况就开始比较复杂了,可以自己推一下;

100%:

本蒟蒻仍然将每种情况都推了一遍。。。唯一要注意的是,一定要把目光放在留下来的西瓜上面,见下。

另外的:注意cmath里的sin什么的都是弧度,我们要把角度转成弧度再用,弧度=π*角度/180°。

代码如下:

 #include<cmath>
 #include<cstdio>
 #include<cstring>
 #include<algorithm>
 using namespace std;
 const double pi=3.14159265358980;
 inline int read(){
     ; char ch=getchar();
     ') ch=getchar();
     +ch-',ch=getchar();
     return x;
 }
 double chg(int x){
     ;
 }
 void situ1(int d1,int d2){
     ||d2==){
         ){) puts("50.0%"); else puts("0.0%");}
         ) puts("50.0%"); else puts("0.0%");}
     }else
     ||d2==){
         ) puts("0.0%"); else puts("100.0%");
     }else
     ||d2==){
         ) puts("0.0%"); else puts("100.0%");
     }
 }
 void situ2(int d1,int d2){
     -d1),ret=sin(del);
     del=chg(d2),ret+=sin(del),ret*=/;
     printf("%.1f%c\n",ret,'%');
 }
 void situ3(int d1,int d2){
     &&d2>=) puts("100.0%");
     else{
         -abs(-d1)),ret=,tot=; ) ret=sin(del);
         ) tot=; else tot=ret;
         del=chg(-abs(-d2)),ret+=sin(del);
         ) tot+=; else tot+=sin(del);
         ret=ret/tot*;
         printf("%.1f%c\n",ret,'%');
     }
 }
 void situelse(int d1,int d2){
     ,ret=,tot=;
     if (d1<d2){
         <=d1&&d1<){
             -d1<=d2-) puts("0.0%");
             else{
                 ) del=chg(d2),ret=sin(del),tot++;
                 ) del=chg(-d2),tot=ret=sin(del);
                 del=chg(d1),ret-=sin(del),tot++;
                 ret=ret/tot*;
                 printf("%.1f%c\n",ret,'%');
             }
         }else
         <=d1&&d1<) puts("0.0%"); else
         <=d1&&d1<){
             -d1>=d2-) puts("0.0%");
             else{
                 del=chg(d1-),tot=ret=sin(del),tot++;
                 del=chg(-d2),ret-=sin(del);
                 ret=ret/tot*;
                 printf("%.1f%c\n",ret,'%');
             }
         }else
         <=d1&&d1<){
             del=chg(-d1),ret=sin(del),tot=;
             del=chg(-d2),ret-=sin(del);
             ret=ret/tot*;
             printf("%.1f%c\n",ret,'%');
         }
     }else{
         <d1&&d1<=){
             del=chg(d1),tot=sin(del);
             del=chg(d2),ret=sin(del);
             ret=ret/tot*;
             printf("%.1f%c\n",ret,'%');
         }else
         <d1&&d1<=){
             ) puts("100.0%"); else{
                 tot=;
                 del=chg(d2),ret=sin(del);
                 ret=ret/tot*;
                 printf("%.1f%c\n",ret,'%');
             }
         }else
         <d1&&d1<=){
             del=chg(d1-),ret=sin(del),tot++;
             <=d2) ret=tot=;
             <d2&&d2<) del=chg(d2),ret+=sin(del),tot++;
             ret=ret/tot*;
             printf("%.1f%c\n",ret,'%');
         }else
         <d1&&d1<){
             del=chg(-d1),ret=sin(del),tot++;
             <d2) del=chg(-d2),tot=sin(del);
             <=d2&&d2<) del=chg(-d2),ret+=sin(del),tot+=sin(del);
             <d2&&d2<) del=chg(d2),ret+=sin(del),tot++;
             ret=ret/tot*;
             printf("%.1f%c\n",ret,'%');
         }
     }
 }
 inline void _solve(){
     int dg_s=read(),dg_t=read();
     ==&&dg_t%==) situ1(dg_s,dg_t); else
     <=dg_s&&dg_s<&&<=dg_t&&dg_t<=) situ2(dg_s,dg_t); else
     <=dg_s&&dg_s<&&<=dg_t&&dg_t<) situ3(dg_s,dg_t); else
     situelse(dg_s,dg_t);
 }
 int main(){
     for (int T=read(); T; T--) _solve();
     ;
 }

[洛谷 P3788] 幽幽子吃西瓜的更多相关文章

  1. 洛谷P1508 Likecloud-吃、吃、吃

    题目背景 问世间,青春期为何物? 答曰:“甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!” 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日上课,正当他饿得头昏 ...

  2. 洛谷 P1508 Likecloud-吃、吃、吃

    P1508 Likecloud-吃.吃.吃 题目提供者JosephZheng 标签 动态规划 难度 普及/提高- 题目背景 问世间,青春期为何物? 答曰:"甲亢,甲亢,再甲亢:挨饿,挨饿,再 ...

  3. 洛谷1508 Likecloud-吃、吃、吃

    题目背景 问世间,青春期为何物? 答曰:“甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!” 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日上课,正当他饿得头昏 ...

  4. 洛谷 P2431 正妹吃月饼 解题报告

    P2431 正妹吃月饼 题目描述 今天是中秋节.\(uim\)带来了一堆大小不同且味道各异的月饼. 这些月饼的质量分别是\(1g\),\(2g\),\(4g\),\(8g\),\(16g\)....后 ...

  5. 洛谷——1508 Likecloud-吃、吃、吃

    题目背景 问世间,青春期为何物? 答曰:“甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!” 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日上课,正当他饿得头昏 ...

  6. 洛谷——P1508 Likecloud-吃、吃、吃

    P1508 Likecloud-吃.吃.吃 题目背景 问世间,青春期为何物? 答曰:“甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!” 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一 ...

  7. 洛谷 - P3786 - 萃香抱西瓜 - 状压dp

    重构一下就过了,不知道之前错在哪里. #include<bits/stdc++.h> using namespace std; typedef unsigned long long ull ...

  8. 洛谷 P3131 [USACO16JAN]子共七Subsequences Summing to Sevens

    P3131 [USACO16JAN]子共七Subsequences Summing to Sevens 题目描述 Farmer John's NN cows are standing in a row ...

  9. 洛谷 P1508 Likecloud-吃、吃、吃 题解

    P1508 Likecloud-吃.吃.吃 题目背景 问世间,青春期为何物? 答曰:"甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!" 题目描述 正处在某一特定时期之中的李大水牛由于消化 ...

随机推荐

  1. windows 如何不显示带点的文件名、文件夹?

    这些以点开头的文件夹和文件是为了在 linux 中隐藏的.但是在 windows 中如何不显示他们? 资源管理器: CMD:

  2. js精度误差

    之前虽然有看到过 js 精度相关的文章.但也都没有“印象深刻” ,但是今天"有幸"遇到了. 做一个项目,进行页面调试的时候, 当数量增加到3时总价格变得好长好长 立马在控制台验证了 ...

  3. 用 Anaconda 完美解决 Python2 和 python3 共存问题

    Python3 被越来越多的开发者所接受,同时让人尴尬的是很多遗留的老系统依旧运行在 Python2 的环境中,因此有时你不得不同时在两个版本中进行开发,调试. 如何在系统中同时共存 Python2 ...

  4. 转youhu科技的文章 勿怪 感激 感激

    资源加载 资源加载是加载模块中最为耗时的部分,其CPU开销在Unity引擎中主要体现在Loading.UpdatePreloading和Loading.ReadObject两项中,相信经常查看Prof ...

  5. [原][osgEarth]在osgearth中添加相机路径动画

    在osg中添加相机动画路径请参考:http://www.cnblogs.com/lyggqm/p/8075277.html 这里的代码是在osgearth中添加相机动画路径漫游器: #include ...

  6. HTML 标记 3 —— CSS

    <style type="text/css">body { background-color: #F00;} p{ color:#0F0; } .自己定义 { colo ...

  7. gulp自动化打包工具

    /** * Created by hasee on 2016/7/5. */var gulp = require('gulp');var sass = require('gulp-sass');//容 ...

  8. python中的面向对象学习以及类的封装(这篇文章初学者一定要好好看)

    这篇文章对于初学者可以很有效的理解面对过程.面对对象 一.首先介绍一下面向过程和面向对象的比较: 面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何 ...

  9. ubuntu无法关机,卡死

    (1)第一种方法(可行,但开关机出现命令行代码) $ sudo vim /etc/default/grub 将GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ...

  10. 图解GIT,ZT

    图解GIT,ZT http://nettedfish.sinaapp.com/blog/2013/08/05/deep-into-git-with-diagrams/