题目

将三角形的六要素只留下三个已知条件,

问有多少种情况,多组询问


分析

首先分类讨论一下(对新高一不友好,比如说我)。

前置知识:

  1. 正弦定理:
\[\frac{a}{sinA}=\frac{b}{sinB}=\frac{c}{sinC}=2r(外接圆的直径)
\]

正弦定理的话应该可以通过做高或者外接圆证明,详见百度百科

  1. 大边对大角,可以通过上面的正弦定理意会一下,三角形内角越大,

    那么它所对应的\(sin\)值越大,根据正弦定理可以知道它的对边也会越大,反过来显然
  2. 余弦定理:
\[cosA=\frac{b^2+c^2-a^2}{2bc}\\
cosB=\frac{a^2+c^2-b^2}{2ac}\\
cosC=\frac{a^2+b^2-c^2}{2ab}
\]

此证明详见百度百科,新高一什么都不会呢

然后具体分成如下四种情况,

  1. 只知道三条边:两边之和均大于第三边为1,否则为0
  2. 只知道三个角:三角形内角和是180度即无限种(相似三角形),否则为0
  3. 只知道两个角,一条边:如果现在知道的两个角的和不小于180度为0,

    否则为1,因为三个角都能求出来,且知道一条边,可以通过大边对大角证明
  4. 只知道一个角,两条边:

    (1). 如果这个角是夹角只有一种情况,根据余弦定理可以将第三条边求出来,

    并且转换成第一个问题,显然计算后两边之和均会大于第三边

    (2). 如果这个角不是夹角,那又要分类讨论:

    如果已知角是直角或者钝角根据大边对大角

    可以知道当已知角的对边长度不超过另一条边无解,因为三角形内角等于180度

    否则答案为1

    如果已知角是锐角,设已知的角为\(\angle A\),它所对的边为\(a\),并且另一条已知边为\(b\)

    首先可以根据正弦定理算出\(sinB\),显然它是一个正数,由于\(sinB\)的值域应为\((0,1]\)

    超过值域无解,\(sinB=1\)(直角)只有一种情况,然后根据大边对大角,

    如果\(a>=b\)只有一种情况,否则有两种情况(一个锐角一个钝角)

    由于C++精度存在一定误差所以还要设置\(eps\)

代码

#include <cstdio>
#include <cctype>
#include <cmath>
#define rr register
using namespace std;
const double pi=acos(-1.0);
const double eps=1e-8;
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline void doit1(int a,int b,int A){
rr double sinB=b*sin(A*pi/180)/a;
if (A>=90){
printf("%d\n",a>b);
return;
}else{
if (sinB-1>eps) printf("0\n");
else if (fabs(sinB-1)<eps) printf("1\n");
else if (a>=b) printf("1\n");
else printf("2\n");
return;
}
}
signed main(){
for (rr int T=iut();T;--T){
rr int a=iut(),b=iut(),c=iut(),A=iut(),B=iut(),C=iut();
if ((~a)&&(~b)&&(~c)){
if (a+b<=c||b+c<=a||a+c<=b) printf("0\n");
else printf("1\n");
continue;
}
if ((~A)&&(~B)&&(~C)){
if (A+B+C!=180) printf("0\n");
else printf("syksykCCC\n");
continue;
}
if (a*b*c<0){
if ((A>0&&b*c>0)||(B>0&&a*c>0)||(C>0&&b*a>0)) printf("1\n");
else if (B>0&&b*c>0) doit1(b,c,B);
else if (C>0&&b*c>0) doit1(c,b,C);
else if (A>0&&a*b>0) doit1(a,b,A);
else if (B>0&&a*b>0) doit1(b,a,B);
else if (A>0&&a*c>0) doit1(a,c,A);
else if (C>0&&a*c>0) doit1(c,a,C);
continue;
}
if (A*B*C<0){
if (B+C>=180||A+B>=180||A+C>=180) printf("0\n");
else printf("1\n");
continue;
}
}
return 0;
}

#正余弦定理#牛客练习赛71 B 烙印的更多相关文章

  1. 牛客练习赛71 数学考试 题解(dp)

    题目链接 题目大意 要你求出有多少个长度为n的排列满足m个限制条件 第i个限制条件 p[i]表示前 p[i]个数不能是1-p[i]的排列 题目思路 这个感觉是dp但是不知道怎么dp 首先就是要明白如果 ...

  2. 牛客练习赛71 C.数学考试 (DP,容斥原理)

    题意:RT 题解:先对\(p\)排个序,然后设\(dp[i]\)表示前\(i-1\)个\(p[i]\)满足条件但是\(p[i]\)不满足,即在\([1,p[i]]\)中不存在从\(p[1]\)到\(p ...

  3. 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)

    牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  4. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  5. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  6. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  7. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  8. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

  9. 牛客练习赛26:D-xor序列(线性基)

    链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...

  10. [堆+贪心]牛客练习赛40-B

    传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费  x_i 的时间,同时完成第 i 个任务的时间不 ...

随机推荐

  1. [BUUCTF][Web][ACTF2020 新生赛]Exec 1

    打开靶机对应url 显示可以输出ip 来进行ping操作 尝试试一下是否有命令注入的可能 127.0.0.1|ls 果然可以,输出结果 index.php PING 127.0.0.1 (127.0. ...

  2. 案例分享:Qt国产麒麟系统某防“某显示控制项目”(多类设备自动化流程控制,数据分析整合与展示,定位图,深度图,热力图等,多应用协调管控,健壮容错)

    喜报   我司承担的某防"某显示控制项目",已于近日顺利通过湖底验收.   需求   功能简介:  1.多类设备的显示.控制与管理  2.数据的分析与展示,定位图.深度图.热力图等 ...

  3. FastAPI中全局异常处理

    装饰器版本自定义异常 1.首先我们定义三个文件,分别为exception.py,main.py, user.py 2.自定义异常需要继承HTTPException,该异常可以从fastapi中直接导入 ...

  4. Sourcetree 如何关联自己的gitlab仓库

    现在有些企业自己搭建了gitlab服务器,通过sourcetree从企业服务器拉取代码的时候会提示认证失败.今天搞了大半天才搞懂,给我自己做个笔记. 添加账户 托管服务商 选择 GitLab CE 托 ...

  5. 【Azure 应用服务】Azure SignalR 是否可以同时支持近十万人在线互动

    什么是 Azure SignalR 服务? Azure SignalR Service 简化了通过 HTTP 向应用程序添加实时 Web 功能的过程. 这种实时功能允许服务将内容更新推送到连接的客户端 ...

  6. Nebula 在 Akulaku 智能风控的实践:图模型的训练与部署

    本文整理自 Akulaku 反欺诈团队在 nMeetup·深圳场的演讲,B站视频见:https://www.bilibili.com/video/BV1nQ4y1B7Qd 这次主要来介绍下 Nebul ...

  7. clickhouse 安装启动报<Error> Application: DB::Exception: There is no profile 'default' in configuration file. 以及常见的错误的总结

    1.启动时报错<Error> Application: DB::Exception: There is no profile 'default' in configuration file ...

  8. Docker部署clickhouse

    Clickhouse特点 完备的DBMS:不仅是个数据库,也是个数据库系统 列存储和数据压缩:典型的olap数据库特性 向量化并行:利用CPU的SIMD(Single INstruction MUlt ...

  9. VS Code Snippet Generator 插件 生成 vscode代码片段

    VS Code Snippet Generator 插件 生成 vscode代码片段

  10. 学习笔记-涛讲F#(基础 II)

    目录 处理一堆数 组织代码(命名空间.模块) 使用联合重命名类型 类必须显式转换成接口 对象表达式 递归函数 CPS解决堆栈溢出 扩展一个类型 静态解析的类型参数 ref变量的实现原理及应用 F#资源 ...