51Nod 1509加长棒
传送门 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509
现在有三根木棒,他们的长度分别是a,b,c厘米。你可以对他们进行加长(不同的木棒可以增加不同的长度),他们总的加长长度不能超过L厘米。你也可以不对他们进行加长。
现在请你计算一下有多少种加长的方式使得他们能构成合法的三角形(面积非0)。
单组测试数据。
共一行,包含4 个整数a,b,c,L (1≤a,b,c≤3*10^5, 0≤L≤3*10^5)。
输出答案占一行。
1 1 1 2
4
这个题我被坑了很久,搞了2.5小时以上了才AC,不过AC的时候真TM爽!(然而岑神几分钟就做对了ORZ)其实很早就有思路了,但是计算的公式疏忽了好几个地方,最后还是下载了部分数据才过的
办法是枚举加长a的量(设其为i),剩余的可用长度为w,很容易得出在不考虑构成三角形的情况下,总共有(w+1)*(w+2)/2种方案,如果减去其中不合法的种数就是a加长量为i的时候的合法方案数了。
不合法的方案有3种,a太长,b太长,c太长(这里说的a,b,c是已经加长后的长度)
针对a太长,我们设x=min(w,a+i-b-c),换句话讲,就是即使给b,c加上共计为x的长度,依然不合法,这种情况数为(x+2)*(x+1)/2
针对b太长或者c太长,其实这两种情况是差不多的,我们设x=w+b-a-c-i(b太长),x=w+c-a-b-i(c太长),思路是先假设b被加到了b+w,然后减掉b中的一部分,把那一部分中的一部分加到c上
然后分三种情况讨论
情况一.w<=x/2 也就是就算把原来加到b上去的长度全卸下来,并且全加到c上去,b还是太长,那么这里的操作是ans-=(1+w)*(w+2)/2;
情况二.w>=x 这种情况下w不会限制我们把b的一部分长度卸下来,操作是ans-=(2+x/2)*(1+x/2)/2,ans-=(x-x/2)*(1+x-x/2)/2;
情况三.x/2<w<x 这种情况下w会限制我们把b的一部分长度卸下来,操作是ans-=(2+x/2)*(1+x/2)/2,ans-=(w-x/2)*(x-x/2+x-w+1)/2;
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
int main()
{
ll i,j;
ll a,b,c,L;
scanf("%lld%lld%lld%lld",&a,&b,&c,&L);
ll ans=;
if(a+b+L<=c||a+c+L<=b||b+c+L<=a)
{
printf("0\n");
return ;
}
for(i=;i<=L;i++)
{
ll w=L-i;
if(a+i>=b+c+w)break;
ans+=(w+)*(w+)/;//√
if(a+i>=b+c)
{
ll x=min(a-b-c+i,w);
ans-=(x+)*(x+)/;//√
}
if(w+b>=a+c+i)
{
ll x=w+b-a-c-i;
if(x<=w)
{
ans-=(+x/)*(+x/)/;
ans-=(x-x/)*(+x-x/)/;
}
else if(w<x)
{
if(w<=x/)
{
ans-=(+w)*(w+)/;
}
else
{
ans-=(+x/)*(+x/)/;
ans-=(w-x/)*(x-x/+x-w+)/;
}
}
}
if(w+c>=a+b+i)
{
ll x=w+c-a-b-i;
if(x<=w)
{
ans-=(+x/)*(+x/)/;
ans-=(x-x/)*(+x-x/)/;
}
else if(w<x)
{
if(w<=x/)
{
ans-=(+w)*(w+)/;
}
else
{
ans-=(+x/)*(+x/)/;
ans-=(w-x/)*(x-x/+x-w+)/;
}
}
}
}
printf("%lld\n",ans);
return ;
}
/*
17 28 19 5558
*/
/*
7396315389 */
/*
100000 300000 100000 100003
*/
/*
400012
*/
51Nod 1509加长棒的更多相关文章
- 51Nod 1509 加长棒(隔板法)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 思路: 直接去解可行的方法有点麻烦,所以应该用总的方法去减去不可行 ...
- 51 Nod 1509 加长棒(巧妙的隔板法计数)
1509 加长棒 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有三根木棒,他们的长度分别是a,b,c厘米 ...
- Good Vegetable 4级算法题 分值: [320/3120] 问题: [8/78]
1523 非回文 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个字符串是非回文的,当且仅当,他只由前p个小写字母 ...
- 【题解】51nod 1203JZPLCM问题
这题好强强啊,貌似是集训队原题?集训队原题当中值域是1e9的范围,这样各种乱搞是妥妥的不能过了,只能写正解的离线+树状数组维护前缀积. 最开始我写了几种乱搞做法,包括莫队和线段树做法.其中表现比较优秀 ...
- 51nod 1402 最大值(贪心)
原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1402 思路:借鉴了这篇博文http://blog.csdn.n ...
- 8个超棒的HTML5网站设计欣赏
我们听到了很多关于HTML5的新闻和技术动向,一个又一个的新的东西不停的出现,那么最近HTML5的技术应用又如何呢?HTML5又和CSS及其Javascript如何一起改变我们的网站设计和实现的呢? ...
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
随机推荐
- hdu 1711---KMP
题目链接 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...
- hello Kotlin!
听说谷爹要把Kotlin作为了Android开发的一级语言,吓得我赶紧写个“Hello Kotlin!”压压惊! Kotlin是由JetBrains 公司开发的语言,并且已经开源.而JetBrains ...
- MySQL 主从复制与读写分离概念及架构分析 (转)
1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...
- 从LINQ开始之LINQ to Objects(下)
前言 上一篇<从LINQ开始之LINQ to Objects(上)>主要介绍了LINQ的体系结构.基本语法以及LINQ to Objects中标准查询操作符的使用方法. 本篇则主要讨论LI ...
- 泛型(java菜鸟的课堂笔记)
1. 泛型的简单运 用和意义 2. 泛型的上限与下限 3. 泛型和 子类继承的限制 4. 泛型类和泛型 方法 5. 泛型嵌套和泛型擦除 ...
- 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大
讲到log4j,现在国外基本是没有开发者用这个框架了,原因大致有几点,1.功能太少:2.效率低下:3.线程锁bug等等等各种莫名其妙的bug一直都没解决. 其实最重要的是log4j的作者自己也放弃了l ...
- PHP:win7 ASP.NET环境与PHP(WAMP)环境如何共存
经验地址:http://jingyan.baidu.com/article/495ba8410f794d38b30ede89.html 笔记本以前安装过asp.net,启用了Windows的IIS服务 ...
- [0] DDD领域驱动设计(二) 之 值对象
DDD中实体对象与值对象的解释比较抽象.主要根据持续性与 ID 识别来区分. ID并非某一对象的直观自然属性,而是在分析建模之 后,赋给模型中的实体类,来达到跟踪,区别,存储目的的一个特值. 结合项目 ...
- Python:Anaconda安装虚拟环境到指定路径
1 曾经的困扰 有段时间,想使用基于不同python版本的anaconda,就直接从官网下载了两个不同的anaconda版本进行安装.刚开始的时候,还觉得也没啥问题.用了一小段时间,在安装其他的第三方 ...
- 关于MATLAB处理大数据坐标文件2017529
今天我们离成功又近了一步,因为又失败了两次 第一次使用了所有特征,理由:前天的特征使用的是取单个特征测试超过85分的特征,结果出现过拟合现象. 本次使用所有特征是为了和昨天的结果作比较. 结果稍好:比 ...