p1954
Posted qywyt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p1954相关的知识,希望对你有一定的参考价值。
说起来,齿轮明明是一块转动的.
这道题概括了数论和图论,是一道很好的水题.
先用一个结构体存一下位置,如果遇见了xi==0&&yi==0的记录一下,它是第一个齿轮.看到n<=1080(好奇怪的数),就直接n^2两两比较齿轮连不连,同时sum[i]++,sum[f]++.最后sum[i]表示第i个齿轮所连的齿轮数量.
所有的齿轮都是连在一起的,看到除了第一个齿轮,其他齿轮都是被一个齿轮带动的,也就是说图画出来是一个链,大部分sum都等于2.唯一不一样的就是第一个和最后一个.用n的时间跑一遍,看谁的sum==1且不是第一个齿轮就输出就好.
using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if(ch==‘-‘) f=-1;ch=getchar();} while(isdigit(ch)) {x=x*10+ch-‘0‘;ch=getchar();} return x*f; } int i,f,tx,ty,tr; int n; int top,sum[1100]; struct node { int x,y,next,r,v; }o[1100]; int main() { n=read(); for(i=1;i<=n;i++) { o[i].x=read(); o[i].y=read(); o[i].r=read(); if(o[i].x==0&&o[i].y==0) top=i; } for(i=1;i<=n;i++) { for(f=i+1;f<=n;f++) { tx=o[i].x-o[f].x; ty=o[i].y-o[f].y; tr=o[i].r+o[f].r; if(tx*tx+ty*ty==tr*tr) sum[i]++,sum[f]++; } } for(i=1;i<=n;i++) if(sum[i]==1&&i!=top) cout<<o[i].x<<‘ ‘<<o[i].y,exit(0); }
以上是关于p1954的主要内容,如果未能解决你的问题,请参考以下文章