hdu 5203 && BC Round #37 1002
代码参考自:xyz111
题意: 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:
勇太有一根长度为n的木棍,这个木棍是由n个长度为1的小木棍拼接而成,当然由于时间放置的久了,一些小木棍已经不牢固了,所以勇太想让六花把这个木棍分成正整数长度的4段,其中有3段要没有不牢固的小木棍,勇太希望这3段木棍的长度和可以最大。同时六花希望在满足勇太要求的情况下让这三根木棍能拼成一个三角形,请问萌萌哒六花有多少种可行的分割方案呢?
当然,这个问题对于萌萌哒六花来说实在是太难了,你可以帮帮她吗?
分析:先求出所有不牢固小木棍中最左边的位置L和最右边的位置R,可以确定的是其中一段一定是[L,R]。由于只有一段含有不稳定的,所以一定是L,R,自己写的时候就没想到
接着分两种情况考虑:
1.L=1或R=n
这样剩下的三段是由一整段木棒截来,我们可以枚举最左边一段的长度,这样可以得到一个关于第二段木棍的不等式,稍微讨论一下即可。
这里的讨论需要详细介绍一下
在这里,我们枚举最左边的线段长度为x1,如图
aaarticlea/png;base64,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" alt="" />
由组成三角形的条件可知
(x1+n-x1-x2)>x2 得x2<n/2,同样可得x1<n/2
x1+x2>n-x1-x2 得x2>n/2-x1
即有 n/2-x1<x2<n/2
则符合条件的x2的个数为(n-1)/2-(n/2-x1) //注意这里是小于不是小于等于,所以要多减个1
2.除了1以外的情况
这种情况相对容易,枚举是左边一段还是右边一段作为完整的一段,然后再枚举另外一段的切割点,判断是否合法,如果合法就使答案加一。
时间复杂度O(n+m)。
Hack点:1.没开long long。2.没有考虑到第一种情况或者第一种情况写错。3.直接尝试用O(n2)的暴力
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int l,r,x,n,m;
int ok(int a,int b,int c)
{
if(a<b) swap(a,b);
if(a<c) swap(a,c);
if(b+c>a) return true;
else return false;
}
long long calc2(int x,int y)
{
long long tot=;
for(int i=;i<x;i++)
if(ok(i,x-i,y)) tot++;
for(int i=;i<y;i++)
if(ok(i,y-i,x)) tot++;
return tot;
}
long long calc1(int n)
{
long long tot=;
for(int i=;i<=n-;i++)
if(*i<n)
{
tot+=(n-)/-(n/-i);
}
return tot;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
l=n,r=;
for(int i=;i<=m;i++)
{
scanf("%d",&x);
l=min(l,x);
r=max(r,x);
}
if(r==n) printf("%lld\n",calc1(l-));
else if(l==) printf("%lld\n",calc1(n-r));
else printf("%lld\n",calc2(l-,n-r));
}
return ;
}
hdu 5203 && BC Round #37 1002的更多相关文章
- HDU 5945 / BestCoder Round #89 1002 Fxx and game 单调队列优化DP
Fxx and game 问题描述 青年理论计算机科学家Fxx给的学生设计了一款数字游戏. 一开始你将会得到一个数\:XX,每次游戏将给定两个参数\:k,tk,t, 任意时刻你可以对你的数执行下面 ...
- hdu 4932 BestCoder Round #4 1002
这题真是丧心病狂,引来今天的hack狂潮~ Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- HDU 5281 BestCoder Round #47 1002:Senior's Gun
Senior's Gun Accepts: 235 Submissions: 977 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- HDU 5203 Rikka with wood sticks 分类讨论
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5203 bc(chinese):http://bestcoder.hdu.edu.cn/con ...
- Codeforces Round #270 1002
Codeforces Round #270 1002 B. Design Tutorial: Learn from Life time limit per test 1 second memory l ...
- 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 ...
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 矩阵快速幂---BestCoder Round#8 1002
当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n) f(n-1)] = [f(n ...
- Educational Codeforces Round 37
Educational Codeforces Round 37 这场有点炸,题目比较水,但只做了3题QAQ.还是实力不够啊! 写下题解算了--(写的比较粗糙,细节或者bug可以私聊2333) A. W ...
随机推荐
- Intellij IDEA导入web项目详解(解决访问的404)
开始时的首页 点击modules 点击modules界面的Paths 点击Libraries 选择lib文件 点击Facets 选择项目 这就是我404的主要原因,因为小白第一次使用idea 所以很疯 ...
- bzoj千题计划247:bzoj4903: [Ctsc2017]吉夫特
http://uoj.ac/problem/300 预备知识: C(n,m)是奇数的充要条件是 n&m==m 由卢卡斯定理可以推出 选出的任意相邻两个数a,b 的组合数计算C(a,b)必须是奇 ...
- jQuery1.11源码分析(3)-----Sizzle源码中的浏览器兼容性检测和处理[原创]
上一章讲了正则表达式,这一章继续我们的前菜,浏览器兼容性处理. 先介绍一个简单的沙盒测试函数. /** * Support testing using an element * @param {Fun ...
- js调试系列: 调试基础与技巧
js调试系列目录: - 昨天我们见识到了断点的强悍,在断点的配合下进行动态调试,让读代码变的轻松不少,特别是ajax之类的.在昨天的课后练习中,确实增加了不少难度,因为 提交评论 按钮是用 jQuer ...
- 第13月第25天 ios11 uitableview reloaddata contentsize
1. [tableView reloadData]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_ ...
- PyQT5 No module named ‘PyQt5.QtWebEngineWidgets’
PyQT5查找不到模块QtWebEngineWidgets pip install pyqt5==5.10.1 或 安装64位的Pyhon解释器
- ffmpeg 合并aac格式音频文件
1:连接到一起 'ffmpeg - i "concat:D:\learn\audio\1.aac|D:\learn\audio\2.aac" - acodec copy D:\le ...
- Docker01 CentOS配置Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- TAU调研咨询
厦门宇能科技有限公司 GPRS-RTU/DTU.3/4G路由器.无线远程抄表.管网监控 咨询电话:0592-5710250 2017-07-04 9:36:16 您好,欢迎光临.请问有什么可以帮到您? ...
- MVC5使用EF6 Code First--创建EF数据模型(一)
此Web应用程序演示如何使用Entity Framework 6和Visual Studio 2015创建ASP.NET MVC 5应用程序.本教程使用“Code First ”即代码先行.有关如何在 ...