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 ...
随机推荐
- dp的进阶 (一)
熟练掌握dp的定义方法. ①四维dp的转移,生命值转移时候需要注意的 ②集合的定义,判断二进制内部是否有环 ③很难想到的背包问题 ④博弈类型的dp ⑤排列组合类型dp ⑥01背包的变种(01背包+完全 ...
- Windows bat 学习(初级)
http://steve-jansen.github.io/guides/windows-batch-scripting/part-1-getting-started.html 注释:REM 或 :: ...
- 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UITableViewCell注册(填写)重用标识符:identifier.必须要代码方法中的标识符一致.
CHENYILONG Blog 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UI ...
- HDU 2521 反素数 模拟题
解题报告:水题,直接附上代码,只是觉得这题的作者是不是吃饱了饭撑的,反素数的概念跟这题一点关系都没有. #include<cstdio> int judge1(int k) { ; ;i& ...
- C. Ayoub and Lost Array(DP)
(又是被队友带着上分的一场--) 题目链接:http://codeforces.com/contest/1105/problem/C 题目大意:给你n,l,r.每一个数都是在l,r范围之内,然后问你这 ...
- 针对Jigsaw勒索软件的解锁工具
针对Jigsaw勒索软件的解锁工具 据了解, 用户的计算机系统一旦感染了勒索软件Jigsaw,如果用户没有在一个小时之内支付赎金(0.4个比特币,价值约为150美金),那么恶意软件将会把系统中的上千份 ...
- VCForPython27.msi安装后, 还显示error: Unable to find vcvarsall.bat
C:\Users\zpc\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC 增加环境变量: SET VCPYTH ...
- TCP/UDP区别&&心跳包机制【转】
转自:https://www.jianshu.com/p/6d93a3c21c34 UDP:用户数据报协议:主要用在实时性要求比较高的以及对质量相对较弱的地方.但是面对现在高质量的线路不会容易丢包,除 ...
- springcloud Eureka自我保护机制
自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Serve ...
- ajax发送多个跨域请求回调不混乱
var count = 0; var codes = ""; function refreshCache(urls){ try { var url = urls.split(&qu ...