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 ...
随机推荐
- Bugfree——CentOS6.8搭建测试环境
参考资料:http://blog.csdn.net/qq_29227939/article/details/52295917 BugFree基于PHP和MySQL开发,是免费且开发源代码的缺陷管理系统 ...
- 8 Productivity hacks for Data Scientists & Business Analysts
8 Productivity hacks for Data Scientists & Business Analysts Introduction I was catching up with ...
- .NET面试题系列(九)C# 结构体与类的区别
谈一下什么时候使用结构,什么使用类. 我们知道,结构存储在栈中,而栈有1个特点,就是空间较小,但是访问速度较快,堆空间较大,但是访问速度相对较慢.所以当我们描述1个轻量级对象的时候,可以将其定义为结构 ...
- 【LibreOJ】#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop 线段树+完全背包
[题目]#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop [题意]给定一个长度为n的物品序列,每个物品有价值.不超过m的重量.要求支持以下三种操作:1.物品价值区间加减,2.物 ...
- Spring Boot实战系列-----------邮件发送
快速导航 添加Maven依赖 配置文件增加邮箱相关配置 Service.Test项目代码构建 五种邮件发送类型讲解 文本邮件 html邮件 附件邮件 html内嵌图片邮件 模板邮件 问题汇总 添加ma ...
- HDU 4472 Count DP题
解题报告:题目大意,给你n个球,要将这n个球从下到上按层次排列,要求同一个层次的的每一个分支的数量都必须相等,问有多少种排列的方法. 此题的一个DP题,假设现在有n个球,要将这n个球排列好,我们就必须 ...
- 解决Winsock2.h和afxsock.h定义冲突的办法
如果我们在工程中使用了afxsock.h,但在其它的地方又加了些 使用winsock2.h,哈哈,VC会告诉你一大堆错误,大意就是有定义重复,该怎么解决? 由于MFC的SOCKET类使用的是Winso ...
- Spark笔记之数据本地性(data locality)
一.什么是数据本地性(data locality) 大数据中有一个很有名的概念就是"移动数据不如移动计算",之所以有数据本地性就是因为数据在网络中传输会有不小的I/O消耗,如果能够 ...
- py-faster-rcnn代码阅读1-train_net.py & train.py
# train_net.py#!/usr/bin/env python # -------------------------------------------------------- # Fas ...
- 【CTF WEB】反序列化
反序列化 漏洞代码 <?php error_reporting(0); if(empty($_GET['code'])) die(show_source(__FILE__)); class ex ...