LightOJ 1410 Consistent Verdicts(找规律)

题目链接:https://vjudge.net/contest/28079#problem/Q

题目大意:题目描述很长很吓人,大概的意思就是有n个坐标代表n个人的位置,每个人听力都是一样的,每人发出一枪,然后每个人给出一个数字表示听到的枪响次数,汇总为结果,结果有很多种(因为不知道人的听力极限范围),问有几种一致的结果(每个人的答案都是不矛盾的)。

解题思路:就是判断一下人和人之间的距离有多少种+1,直接计算所有人之间距离排序去重+1就好了。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=700+5;
 6 
 7 struct node{
 8     int x,y;
 9 }a[N];
10 
11 int res[N*N];
12 
13 int dis(int i,int j){
14     return (a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
15 }
16 
17 int main(){
18     int T;
19     scanf("%d",&T);
20     int cas=0;
21     while(T--){
22         int n;
23         scanf("%d",&n);    
24         for(int i=1;i<=n;i++){
25             scanf("%d%d",&a[i].x,&a[i].y);
26         }
27         int cnt=0;
28         for(int i=1;i<=n-1;i++){
29             for(int j=i+1;j<=n;j++){
30                 res[++cnt]=dis(i,j);
31             }
32         }
33         sort(res+1,res+cnt+1);
34         int ans=cnt;
35         for(int i=2;i<=cnt;i++){
36             if(res[i]==res[i-1])
37                 ans--;
38         }
39         printf("Case %d: %d\n",++cas,ans+1);
40     }
41 }

 

转载于:https://www.cnblogs.com/fu3638/p/7448063.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值