传送门

做出一个好几个星期屯下来的题目的感觉就是一个字:

爽!



上图的黄点部分就是我们需要求的点

两边的部分很好算

求圆的地方有一个优化,由于圆心是整数点,我们可以把圆分为下面几个部分,阴影部分最难算,最后乘就好了

代码如下所示

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
const int INF = 0x3f3f3f3f;
typedef long long ll;
typedef long double Double;
const Double tiny = 1e-20; ll Ceil(Double x) {
ll tt = ceil(x);
if(abs(tt - x) < tiny) tt ++;
return tt;
} ll Floor(Double x) {
ll tt = floor(x);
if(abs(tt - x) < tiny) tt --;
return tt;
} int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif int r, a, b, n;
while(~scanf("%d %d %d %d", &r, &a, &b, &n)) {
Double leftEdge = Double(a*1.0)/b;
Double rightEdge = 2*n - Double(a*1.0)/b;
Double radiusTo2 = n - Double(a*1.0)/b;
if(leftEdge > rightEdge) swap(leftEdge, rightEdge);
ll sum = 0; Double leftDouble = r + 2*leftEdge;
int leftInt = ceil(leftDouble); Double rightDouble = r - 2*rightEdge;
int rightInt = ceil(rightDouble); sum += 1ll * (rightInt + leftInt) * r;
if(rightInt % 2) sum += r & 1;
if(leftInt % 2) sum += r & 1;
// printf("%d %d %lld\n", leftInt, rightInt, sum);
Double cirRadius = (rightEdge - leftEdge) / sqrt(2);
// printf("%.3f\n", cirRadius);
ll tmpSum = 0;
for(int i = Floor(cirRadius), edge = ceil(radiusTo2); i >= edge; --i) {
tmpSum += Floor(sqrt( (rightEdge - leftEdge)*(rightEdge - leftEdge) / 2 - 1ll*i*i));
// tmpSum += Floor(sqrt( cirRadius * cirRadius - 1ll*i*i));
}
sum += tmpSum * 8;
// printf("%lld\n", sum);
sum += 1ll * Floor(cirRadius) * 4;
// printf("%lld\n", sum);
// printf("%.9f\n", (rightEdge - leftEdge)/2.0);
sum += 1ll* Floor(radiusTo2) * Floor(radiusTo2) * 4; sum -= 1ll * Floor(n - leftEdge) * 2; printf("%lld\n", sum);
}
return 0;
}

hackerrank Project Euler #210: Obtuse Angled Triangles的更多相关文章

  1. Project Euler 94:Almost equilateral triangles 几乎等边的三角形

    Almost equilateral triangles It is easily proved that no equilateral triangle exists with integral l ...

  2. Project Euler 91:Right triangles with integer coordinates 格点直角三角形

    Right triangles with integer coordinates The points P (x1, y1) and Q (x2, y2) are plotted at integer ...

  3. Project Euler 39 Integer right triangles( 素勾股数 )

    题意:若三边长 { a , b , c } 均为整数的直角三角形周长为 p ,当 p = 120 时,恰好存在三个不同的解:{ 20 , 48 , 52 } , { 24 , 45 , 51 } , ...

  4. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  5. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  6. Project Euler 9

    题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...

  7. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  8. project euler 169

    project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...

  9. 【Project Euler 8】Largest product in a series

    题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...

随机推荐

  1. 全局ajax的使用

    一.ajax介绍 详细介绍请看:http://www.runoob.com/ajax/ajax-tutorial.html AJAX = Asynchronous JavaScript and XML ...

  2. python查看微信消息撤回

    准备环境 python语言环境 python解释器-pycharm itchat介绍 itchat是一个开源的微信个人号接口,通过itchat可以实现微信(好友或微信群)的信息处理,包括文本.图片.小 ...

  3. HDU 2088 Box of Bricks(脑洞)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2088 Box of Bricks Time Limit: 1000/1000 MS (Java/Oth ...

  4. js判断中文字符串长度和js截取中文字符串

    //获取字符串长度String.prototype.strLen = function() { var len = 0; for (var i = 0; i < this.length; i++ ...

  5. Maven项目改为spring boot项目的方法

    目录树 新建Maven项目及步骤 修改方法 启动测试 新建Maven项目及步骤 我这里是从创建开始讲,使用的工具是Idea2017版本.如果是已经创建了Maven,想改为spring boot项目的请 ...

  6. Oracle 左连接(+)加号用法及常用语法之间的关系

    本文目的: 通过分析左连接(+)加号的写法和一些常用语法之间的联系,了解到Oracle 加号(+)的用法 分析步骤: 1.首先创建测试表的结构: create table test_left_a (a ...

  7. Linux系统NBD驱动安装拓展篇

    前言: 最近在安装中标麒麟机器的时候,发现麒麟的操作系统找不到src.rpm包,且系统内部也没有内核文件,导致正常方法安装NBD驱动无法实施.故这里找了另一种办法帮助此类型操作系统安装NBD驱动. 一 ...

  8. 曾经被UITextField给坑一把

    UITextField *tfText = [[UITextField alloc] initWithFrame:CGRectMake(30, 150, self.view.frame.size.wi ...

  9. DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池

    DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑 ...

  10. 单源最短路dijkstra算法&&优化史

    一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...