NC212859. 烙印
描述
Ynoi 是一个可爱的女孩子,她想要设计一个独特的烙印。
Ynoi 认为,烙印必须得是一个三角形的。但是她太忙了,所以她找到了 syksykCCC 帮忙。
syksykCCC 接到这个任务后,觉得太简单了,所以他给了这个三角形 个限制。众所周知,三角形的六要素是三条边和三个角,所以 syksykCCC 规定了其中三个元素的值,他现在想要考考你,满足这
个条件的三角形有多少种?
输入描述
每个测试点的第一行是一个正整数
,表示有多少组数据。
每组数据包含六个正整数,分别记作
。前三个表示三条边,单位是厘米,后三个表示三个角,单位是度数。如果这个数据不给出,则用
代替。规定
的对角为
,
的对角为
,
的对角为
。
输出描述
对于每组数据,输出一个整数,表示可以得到的不全等的烙印的数量。如果没有符合要求的烙印输出,有无限符合要求的输出 "syksykCCC"。
示例1
输入:
5 1 -1 1 -1 90 -1 -1 -1 -1 30 60 90 3 4 5 -1 -1 -1 2 -1 -1 90 90 -1 3 -1 4 30 -1 -1
输出:
1 syksykCCC 1 0 2
说明:
样例有 5 组数据
时,没有方案,因为不可能一个三角形中有两个
角。
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2020-10-10 21:01:47
#include<bits/stdc++.h> #define eps 1e-8 using namespace std; double pi=acos(-1); int main(){ double qt,a,b,c,ja,jb,jc; cin>>qt; while(qt--){ cin>>a>>b>>c>>ja>>jb>>jc; double t=0,jt=0; if(a==-1)t++; if(b==-1)t++; if(c==-1)t++; if(ja!=-1)jt+=ja; if(jb!=-1)jt+=jb; if(jc!=-1)jt+=jc; if(t==3){ if(jt!=180)printf("0\n"); else printf("syksykCCC\n"); continue; } else if(t==2){ if(jt>=180)printf("0\n"); else printf("1\n"); } else if(t==1){ if(jt>=179)printf("0\n"); else if(a!=-1&&b!=-1&&jc!=-1)printf("1\n"); else if(a!=-1&&c!=-1&&jb!=-1)printf("1\n"); else if(b!=-1&&c!=-1&&ja!=-1)printf("1\n"); else { double ta,tb,t1; if(a!=-1&&ja!=-1)ta=a,t1=ja; if(b!=-1&&jb!=-1)ta=b,t1=jb; if(c!=-1&&jc!=-1)ta=c,t1=jc; if(a!=-1&&ja==-1)tb=a; if(b!=-1&&jb==-1)tb=b; if(c!=-1&&jc==-1)tb=c; if(t1<90){ t1=pi*t1/180.0; if(fabs(ta-tb*sin(t1))<=eps){ printf("1\n");continue; } if(ta>=tb){ printf("1\n");continue; } if(ta<tb&&ta-tb*sin(t1)>eps){ printf("2\n");continue; } if(tb*sin(t1)-ta>eps){ printf("0\n");continue; } } else { if(ta>tb)printf("1\n"); else printf("0\n"); } } } else if(t==0){ if(a+b>c&&a+c>b&&b+c>a)printf("1\n"); else printf("0\n"); } } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 352K, 提交时间: 2020-10-10 00:15:34
#include<bits/stdc++.h> using namespace std; double pi=acos(-1.0); int a[3],b[3]; int main(){ int t;scanf("%d",&t); while(t--){ int cnt=0; for(int i=0;i<3;++i){ scanf("%d",a+i); if(a[i]!=-1)++cnt; } for(int i=0;i<3;++i)scanf("%d",b+i); if(cnt==3){ if(a[0]+a[1]>a[2]&&a[1]+a[2]>a[0]&&a[0]+a[2]>a[1])puts("1"); else puts("0"); }else if(cnt==0){ if(b[0]+b[1]+b[2]==180)puts("syksykCCC"); else puts("0"); }else if(cnt==1){ int s=0; for(int i=0;i<3;++i) if(b[i]!=-1)s+=b[i]; if(s<180)puts("1"); else puts("0"); }else{ int p,q; for(int i=0;i<3;++i)if(b[i]!=-1)p=i; if(a[p]==-1)puts("1"); else{ for(int i=0;i<3;++i)if(a[i]!=-1&&i!=p)q=i; if(b[p]<=90){ double u=pi*b[p]/180,l=sin(u)*a[q]; if(l-a[p]>1e-6)puts("0"); else if(fabs(l-a[p])<=1e-6)puts("1"); else if(a[p]<a[q])puts("2"); else puts("1"); }else{ if(a[p]<=a[q])puts("0"); else puts("1"); } } } } }