我是靠谱客的博主 紧张紫菜,最近开发中收集的这篇文章主要介绍2017 ACM-ICPC南宁网络赛: I. GSM Base Station Identification(线性变换),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

https://nanti.jisuanke.com/t/17316
题面有问题直接放链接

题意:

输入一个坐标,问这个坐标所在正六边形的ID,正六边形具分布如下:



题解:

还是看上图,坐标系原点不变,其他所有的点按照一定规则变换到对应正六边形的红点上

例如(1,0)->(sqrt(3), 0),(0, 1)->(sqrt(3)/2, 1.5)

变换规则为(x和y都要先除以5!


之后每输入一个点,只要暴力变换后坐标系的每个点即可,如果两个点距离小与等于1直接输出

#include<stdio.h>
#include<math.h>
int main(void)
{
	int T, i, j, ax, ay;
	double x, y, a, b;
	T = 10;
	while(T--)
	{
		scanf("%lf%lf", &a, &b);
		a /= 5, b /= 5;
		//ax = ay = 1000;
		for(i=-9;i<=10;i++)
		{
			for(j=-9;j<=10;j++)
			{
				x = i*sqrt(3.0)+j*sqrt(3.0)/2;
				y = j*3/2;
				if((x-a)*(x-a)+(y-b)*(y-b)<=1)
					ax = i, ay = j;
			}
		}
		printf("[%d,%d]", ax, ay);
		if(T!=0)
			printf(", ");
	}
	printf("n");
	return 0;
}


最后

以上就是紧张紫菜为你收集整理的2017 ACM-ICPC南宁网络赛: I. GSM Base Station Identification(线性变换)的全部内容,希望文章能够帮你解决2017 ACM-ICPC南宁网络赛: I. GSM Base Station Identification(线性变换)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部