题解 P5600
总结:这题较难,考查了枚举和乱搞的能力(说过了,这道题真的有点依靠乱搞水平,或许比爆搜还快不少)。
Data7 :
纯考平面几何知识的一道题。
观察一段时间目标点之后,我们发现这题是求一个三角形的费马点。
我们求一个三角形的费马点,如果这个三角形有一个内角大于等于
我们可以据此推出较简单的一种作法:
向△
于是我们可以得到以下
那么很快我们就有一种
这是我考场上想到的作法,但是你是不是发现我在上上张图中有一条线在上张图中没有出现?
我们想到,我们不必要把这个等边三角形求出来,我们只需要知道这个
我们如此作三个圆之后,根据圆的性质,我们得到四边形
作法:连结
因为
总结:一道几何题,由
Data8 :
和
比起
对这种中垂线构造如果熟悉的话这题没有难度。
总结:
Data9 :
还算容易的乱搞题。
在直线
我们观察到红点
总结:如果愿意去做这题,那么
Data10 :
非常难的乱搞做法。
我们观察到
观察所求
最终,我们的
总结:爆搜和乱搞都行的一个很难的点。但是我不会爆搜于是只能乱搞。
大总结:非常适合颓♂废的一道题,不过大家还是自己写比较好,也能比较好的锻炼几何感觉。
最后放下代码,各位可以对比对照一下(仅有答案),如果有更好的作法欢迎提出(
#include <bits/stdc++.h>
using namespace std;
void BigPrint1()
{
printf("40\n");
printf("2 0 1 0 0\n");
printf("1 0 1 0 -1\n");
printf("1 0 -1 0 1\n");
printf("2 -1.7320508075689 0 1.7320508075689 0\n");
printf("1 0 1 0 0\n");
printf("1 1 0 0 0\n");
printf("1 2 0 1 0\n");
printf("1 0 2 0 1\n");
printf("1 3 0 0 0\n");
printf("1 0 3 0 0\n");
printf("1 6 0 1 0\n");
printf("1 0 6 0 1\n");
printf("1 11 0 0 0\n");
printf("1 0 11 0 1\n");
printf("1 22 0 0 0\n");
printf("1 0 21 0 1\n");
printf("1 44 0 1 0\n");
printf("1 0 41 0 1\n");
printf("1 87 0 1 0\n");
printf("1 0 81 0 1\n");
printf("1 173 0 1 0\n");
printf("1 0 161 0 1\n");
printf("1 345 0 0 0\n");
printf("1 0 321 0 0\n");
printf("1 690 0 1 0\n");
printf("1 0 642 0 1\n");
printf("1 1379 0 1 0\n");
printf("1 0 1283 0 0\n");
printf("1 2757 0 1 0\n");
printf("1 0 2566 0 0\n");
printf("1 5513 0 1 0\n");
printf("1 0 5132 0 1\n");
printf("1 11025 0 1 0\n");
printf("1 0 10263 0 1\n");
printf("1 22049 0 0 0\n");
printf("1 0 20525 44098 0\n");
printf("1 44098 0 0 20525\n");
printf("2 4273.8285813547 -27927.4882594317 39824.1714159424 48452.4882592014\n");
printf("2 0 20525 44098 0\n");
printf("2 0 0 22049 10262.5\n");
}
void BigPrint2()
{
printf("9\n");
printf("1 10.64978745 0 0 0\n");
printf("1 0 0 10.64978745 0\n");
printf("1 -10.64978745 0 0 0\n");
printf("1 5.324893725 9.2229864766047 -10.64978745 0\n");
printf("2 -2.8891429892634 -7.293172854404 -5.324893725 9.2229864766047\n");
printf("1 -3.9647169644197 0 -10.64978745 0\n");
printf("2 -2.1668572419475 6.4387784412487 5.324893725 9.2229864766047\n");
printf("2 21.2995749 0 -13.0855381857366 10.3675016799389\n");
printf("1 -6.5503572407083 8.39707048614 22.6154412356748 15.6487848683712\n");
}
int main()
{
int n; scanf("%d",&n);
if(n==1) {printf("3\n1 0 0 1 0\n1 1 0 0 0\n2 0.5 0.8660254037844 0.5 -0.8660254037844\n"); return 0; }
if(n==2) {printf("3\n1 1 0 5.23124577 4.31624417\n1 7.0442869307472 0 5.23124577 4.31624417\n2 5.23124577 4.31624417 5.23124577 -4.31624417\n"); return 0; }
if(n==3) {printf("5\n1 0 0 1 0\n1 1 0 0 0\n2 0.5 0.8660254037844 0.5 -0.8660254037844\n1 0.5 1 0.5 0\n2 0.9916198487096 0.1291900756452 -0.4916198487096 0.8708099243548\n"); return 0; }
if(n==4) {printf("10\n1 1 0 0 0\n1 2 0 0 0\n1 4 0 0 0\n1 8 0 0 0\n1 16 0 0 0\n1 32 0 0 0\n1 64 0 0 0\n1 128 0 0 0\n1 256 0 0 0\n1 512 0 0 0\n"); return 0; }
if(n==5) {printf("10\n1 1 0 0 0\n1 2 0 0 0\n1 4 0 0 0\n1 8 0 0 0\n1 16 0 0 0\n1 32 0 0 0\n1 64 0 0 0\n1 128 0 4 0\n1 252 0 0 0\n1 504 0 8 0\n"); return 0; }
if(n==6) {BigPrint1(); return 0; }
if(n==7) {printf("5\n1 0 0 12.34441574 0\n1 12.34441574 0 0 0\n2 5.16457145 9.12243565 6.17220787 -10.6905776257165\n1 5.0557791797877 11.2616027654675 0 0\n2 0 0 17.4001949197877 11.2616027654675\n"); return 0; }
if(n==8) {printf("5\n1 0 0 5.16457145 9.12243565\n1 12.34441574 0.00000000 5.16457145 9.12243565\n1 0.7354107775996 0 10.4829208930787 0\n1 10.4829208930787 0 0.7354107775996 0\n2 5.6091658353392 8.4415913836507 5.6091658353392 -8.4415913836507\n"); return 0; }
if(n==9) {printf("6\n1 10.64978745 0 0 0\n1 0 0 10.64978745 0\n1 -10.64978745 0 0 0\n1 5.324893725 9.2229864766047 -10.64978745 0\n2 -5.324893725 9.2229846217 -2.8891429892634 -7.293172854404\n1 -3.9647169644197 0 -10.64978745 0\n"); return 0;}
if(n==10) {BigPrint2(); return 0; }
return 0;
}