zoj 1504 || poj 1244

告诉你一个重下至下放置的正字母三角形,按字母顺序输出其中能构成正三角形的字母

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define Ni 145

struct node{
	double x,y;
}b[Ni];
double abs1(double kk){
	if (kk<0) return -kk;
	else return kk;
}
int c[4],next[Ni],first[27],uu;
double di(int k1,int k2){
	double distance=0;
	distance=pow(abs1(b[k1].x-b[k2].x),2)+pow(abs1(b[k1].y-b[k2].y),2);
	return distance;
}
void deal(int u,int k){
	c[k]=u;
	if (k==3){
		if (abs1(di(c[1],c[2])-di(c[2],c[3]))<1e-6 && abs1(di(c[1],c[2])-di(c[1],c[3]))<1e-6) uu=1;
		return ;
	}
	int j=next[u];
	while (j!=0){
		deal(j,k+1);
		j=next[j];
		if (uu) return ;
	}
	return ;
}
int main (void){
	int n,s,ans,i,j,used[27];
	char a;
	while (1){
		scanf("%d",&n);
		if (n==0) break;
		s=0;
		ans=0;
		getchar();
		for (i=1;i<=26;i++) {first[i]=0;used[i]=0;}
		for (i=0;i<n;i++){
			for (j=0;j<=i;j++){
				scanf("%c",&a);
				s++;
				b[s].x=(n-i-1+j*2)*0.5;
				b[s].y=(n-i-1)*sqrt(3)/2;
				next[s]=first[a-96];
				first[a-96]=s;
				used[a-96]++;
			}
		}
		for (i=1;i<=26;i++) 
		if (used[i]>=3) {
			uu=0;
			deal(first[i],1);
			if (uu==1) {
				ans++;
				printf("%c",(char)(96+i));
			}
		}
		if (ans==0) printf("LOOOOOOOOSER!\n");
		else printf("\n");
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值