列表

详情


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");
				}
			}
		}
	}
} 

上一题