hdu 5203
题目大意:
有n根连续的木棒,其中有m根是坏的,现在要求将木棒切成连续的四段,使得其中三段中都不包含坏的木棒,且三段木棒的长度和最大,在最长的前提下看这三段木棒能否拼成三角形,如果能的话,问最多有多少种且木棒的方法
解题思路:要使三段都不含坏的木棒,就要把所有坏的木棒包含在一段里,就要找出坏的木棒的最小位置和最大位置,然后往这两处进行切割,这样就分成三段了,找出最长的那段再进行切割,再判断能否组成三角形即可(这是一般情况)
特殊情况下,坏的木棒是在第一根和最后一根,这要进行特殊处理
1。如果坏的木棒有第一根和最后一根,那么答案就是0了
2。如果第一根坏了且最后一根没坏,那么就找到最大的那根坏的木棒的位置进行切割,这样就剩下一段好的了
3。如果最后一根坏了且第一根没坏,那么就找到最小的那根坏的木棒的位置进行切割
考虑一下只剩一段如何求切割方法,这里借用了一下别人的图
枚举x1,由组成三角形的条件可得
x1 + n - x1 - x2 > x2,即 n / 2 > x2
x1 + x2 > n - x1 - x2,即x2 > n / 2 - x1
x2 + n - x1 - x2 > x1,即n / 2 > x1
有上面可得 n / 2 -x1 < x2 < n / 2
因为是小于而不是小于等于(例子是n=4,x1 = 1的时候),所以上面的式子要改为n / 2 - x1 < x2 < (n+1) / 2
所以只要枚举所有的x1,求出x2,就是所有的切割方法了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1010 int main()
{
int n ,m;
while(scanf("%d%d", &n, &m) == )
{
int Min = n + , Max = -, pos;
for(int i = ; i < m; i++)
{
scanf("%d", &pos);
Min = min(Min,pos);
Max = max(Max,pos);
} if(Min == && Max == n)
{
printf("0\n");
continue;
} int len1, len2;
len1 = Min - ;
len2 = n - Max; if(len1 > len2)
swap(len1,len2); int L , R;
if(Min == || Max == n)
{
long long ans = ;
for(int i = ; i < n; i++)
{
if(i >= len2 - i)
break; L = (len2 ) / - i;
R = (len2 + ) / ;
ans += (R - L - );
}
printf("%I64d\n",ans);
continue;
}
else
{
long long ans = ;
int t;
//printf("%d %d\n",len1,len2);
for(int i = ; i < len2; i++)
{
t = len2 - i;
if(len2>len1&&len1 + * i > len2 && len1 + len2 > * i)
ans++;
}
printf("%I64d\n",ans);
}
}
return ;
}
hdu 5203的更多相关文章
- HDU 5203 Rikka with wood sticks 分类讨论
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5203 bc(chinese):http://bestcoder.hdu.edu.cn/con ...
- hdu.5203.Rikka with wood sticks(数学推导:一条长度为L的线段经分割后可以构成几种三角形)
Rikka with wood sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- hdu 5203 && BC Round #37 1002
代码参考自:xyz111 题意: 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:勇太有一根长度为n的木棍,这个木棍是由n个长度为1的小木棍拼接而成,当然由于时间 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
随机推荐
- How to Run a .Jar Java File
.jar files are used for archiving, archive unpacking. One of the essential features of jar file is l ...
- 常州培训 day7 解题报告
最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元 n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...
- 警卫安排(dp好题)
警卫安排(guard)[题目描述]一个重要的基地被分为 n 个连通的区域.出于某种神秘的原因,这些区域以一个区域为核心,呈一颗树形分布.在每个区域安排警卫所需要的费用是不同的,而每个区域的警卫都可以望 ...
- Codeforce385C 树状数组+素因子分解
题目大意: 给多个区间的询问,在询问区间内每一个出现的素数去计算所有数中有多少个数能被这个素数整除 然后将所有素数得到的对应值求和 这里因为初始给定的数不超过10000000,最多670000不到的素 ...
- bzoj 2440 简单莫比乌斯反演
题目大意: 找第k个非平方数,平方数定义为一个数存在一个因子可以用某个数的平方来表示 这里首先需要考虑到二分才可以接下来做 二分去查找[1 , x]区间内非平方数的个数,后面就是简单的莫比乌斯反演了 ...
- 深入理解dispatch_queue
Grand Central Dispatch是苹果过去几年创造出来的非常强大的API,在Let's Build系列的最新一期中,我们将探究dispatch_queue基础功能的重新实现.该主题是Rob ...
- 从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看
从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 最近在面试中,除了基础 & 算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全 ...
- System.out.println()输出到指定文件里
public static void main(String[] args) throws Exception{ String str = "abcd"; PrintStream ...
- (转)经典收藏 50个jQuery Mobile开发技巧集萃
(原)http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 经典收藏 50个jQuery Mobile开发技巧集萃 ...
- apk在IIS中的MIME设置
支持下载的话: 扩展名中填写“.apk”, MIME类型中填写apk的MIME类型“ application/vnd.android.package-archive ”