• CodeForces


    /*
    1.先说下这题的思路,这题并不是难在代码,但是不太好想。正n边形的内角和为 (n-2)*180°,这个公式当时自然记得。
    但是,有些别的点却是要自己想的,简述思路如下:
    正n边形每个顶角的大小为 (n-2)*180/n°
    对正n边形的任一顶点,除去它自己和相邻的两个顶点,该定顶点可以与剩余的 (n-3) 个顶点连成(n-3)条对角线,这些对角线可将该顶点对应的顶角分为(n-3)+1,即(n-2)个部分,每部分180/n°
    
    于是正n边形任意三个顶点构成的角度的范围,则是从 180/n° ~ 180 * (n-2) /n°
    
    
    2.为了方便输出,许多博客上的题解,都是采用固定前两个顶点,例如固定2 1,因为这样固定,目标答案所对应的角度,和第三个顶点的序号的的关系,比较容易能表示出来
    
    
    3.这题还有值得一说的是,自己写的时候,突然发现WA,但是对比一下,发现没什么不同,最后才发现,是 "double angle = 180.0 / n;"这句,我忘了写.0
    这里就有个提示:一般浮点数的加减乘除法一定要尤为注意,例如这题,如果我仅仅写 double angle = 180/n,它仅仅是将这部当作int型之间的除法,不会涉及到小数点,即便我定义的angle是double型,也是如此,不信可以自己尝试着输出一下 “cout << "test: " << angle << endl;”,即便是我们认为该得到小数的情况,它仍然向下取整
    这点一定要尤其注意!
    
    以及,这题还有一个略微容易WA的地方,每次循环都要更新mina,不然起不到mina取一个极大的数,来方便刷新最小值的作用
    
    
    
    我自己敲的代码,参考自代码:
    http://blog.csdn.net/Richie_ll/article/details/74938016
    
    
    
    此外,这个博客的代码,思路巧妙,在于固定两点,暴力求解第三点(上一个博客的代码也有用到);更在于,绕过了浮点数的精度问题,因为,在此题中,180/n的效果,和a *= n的效果是一样的,所以,就可以避开所有的double型数据,直接用int型处理,省去了浮点的加减乘除,可以绕开忘记加上.0造成的错误
    http://blog.csdn.net/a664607530/article/details/73826319
    
    
    
    以及再说说下面这个blog
    http://www.oyohyee.com/post/Codeforces/820B.html
    本来想说它是因为,这是我看过的最好看的博客了,我指的是整个blog,感觉做得很是用心,希望当我学习网页时,也能自己做出这样一个blog
    当然,最欣赏的是,他的blog里面关于ACM的干货挺多
    同时也学到了一些写法:
    1.#ifdef debug #endif,这是用读写文件的方式来核对输出的一个常用写法,好像其实是在入门经典看到过的,但平时没怎么用,羞愧
    2.int START = clock();
      printf("Time:%.3fs.
    ", double(clock() - START) / CLOCKS_PER_SEC);
      这个似乎也是入门经典里面提到过的,可以得到代码运行时间
    3.cin.tie(0);
      cin.sync_with_stdio(false);
      这两句是能够加快 cin cout 的速度的,在TLE时可能会用到,就不必特意换成scanf和printf了
      有关这个知识点的blog:
      http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.html
      http://blog.csdn.net/u010620604/article/details/50803163
      http://blog.csdn.net/asx20042005/article/details/7365511
    
      说明:
      这串代码中的"double temp = (180 * i - t * i) / 2;" 虽然好像和 180.0/n*i 不太一样,但其实化简以后,得到的结果是一样的
    
    */



    #include <bits/stdc++.h>
    const double INF = 1e9; // min angle
    using namespace std;
    int main()
    {
    	int n, a;
    	while (cin >> n >> a)
    	{
    		double mina = INF;
    		double angle = 180.0 / n;
    		int mini = 0;
    		for (int i = 1; i <= (n - 2); i++)
    		if (fabs(angle * i - a) < mina)
    		{
    			mina = fabs (angle * i - a);
    			mini = i;
    		}
    		cout << "2 1 " << 2 + mini << endl;
    	}
    	return 0;
    }


  • 相关阅读:
    Scala中使用fastJson 解析json字符串
    SparkStreaming直连方式读取kafka数据,使用MySQL保存偏移量
    Spark 将DataFrame所有的列类型改为double
    Idea里面远程提交spark任务到yarn集群
    Spark-读写HBase,SparkStreaming操作,Spark的HBase相关操作
    scala之map,List,:: , +:, :+, :::, +++操作
    kafka auto.offset.reset参数解析
    spark-submit提交spark任务的具体参数配置说明
    docker plugin test
    docker ui
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789508.html
Copyright © 2020-2023  润新知