代码参考自: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的更多相关文章

  1. HDU 5945 / BestCoder Round #89 1002 Fxx and game 单调队列优化DP

    Fxx and game 问题描述   青年理论计算机科学家Fxx给的学生设计了一款数字游戏. 一开始你将会得到一个数\:XX,每次游戏将给定两个参数\:k,tk,t, 任意时刻你可以对你的数执行下面 ...

  2. hdu 4932 BestCoder Round #4 1002

    这题真是丧心病狂,引来今天的hack狂潮~ Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  3. 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: ...

  4. HDU 5203 Rikka with wood sticks 分类讨论

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5203 bc(chinese):http://bestcoder.hdu.edu.cn/con ...

  5. Codeforces Round #270 1002

    Codeforces Round #270 1002 B. Design Tutorial: Learn from Life time limit per test 1 second memory l ...

  6. 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 ...

  7. 暴力+降复杂度 BestCoder Round #39 1002 Mutiple

    题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...

  8. 矩阵快速幂---BestCoder Round#8 1002

    当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n)   f(n-1)] = [f(n ...

  9. Educational Codeforces Round 37

    Educational Codeforces Round 37 这场有点炸,题目比较水,但只做了3题QAQ.还是实力不够啊! 写下题解算了--(写的比较粗糙,细节或者bug可以私聊2333) A. W ...

随机推荐

  1. SQL记录-PLSQL事务

    PL/SQL事务   数据库事务是一个工作的原子单元,其可以由一个或多个相关的SQL语句组成.所谓的原子性就是数据库的修改所带来的构成事务的SQL语句可以集体被提交,即永久到数据库或从数据库中(撤消) ...

  2. python 基础 元组()

    # 元组 应用场景 # 尽管 Python的列表中可以存储不同类型的数据 # 但是在开发中,更多的应用场景是 # 1.列表存储相同类型的数据 # 2.通过迭代遍历,在循环体内部,针对列表中的每一项元素 ...

  3. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  4. RESET MASTER和RESET SLAVE使用场景和说明【转】

    [前言]在配置主从的时候经常会用到这两个语句,刚开始的时候还不清楚这两个语句的使用特性和使用场景. 经过测试整理了以下文档,希望能对大家有所帮助: [一]RESET MASTER参数 功能说明:删除所 ...

  5. sort命令的k选项大讨论【转】

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  6. 【译】Asp.Net Identity与Owin,到底谁是谁?

    送给正在学习Asp.Net Identity的你 :-) 原文出自 trailmax 的博客AspNet Identity and Owin. Who is who. Recently I have ...

  7. ssh命令集锦

    [前提] ssh命令其实平时工作会比较少能够用到(因为直接用远程客户端来连接) 但是偶尔还是需要利用ssh临时的连接到某个服务器,所以当遇到的时候来总结一下 [集锦] 一.ssh以某个用户名连接到某个 ...

  8. Java中static关键字概述

    例如一个学生类中,我们需要统计下学生类中学生对象的数量,此时数量要定义为静态变量: 示例代码: package com.java1995; public class Student { int id= ...

  9. day25作业

    1.阻塞  2.就绪  3.阻塞  4.Runnable  5.join()  6.synchronized  7.notify()和notifyAll()   8.Object 1.A   2.D  ...

  10. Linux学习笔记:常用命令grep、iconv、cp、mv、rm

    本篇记录一些近期常用的命令. 一.grep过滤 grep过滤 不包含某些字符串 cat test.txt | grep -v '.jpg' 过滤jpg结尾的图片 cat test.txt | grep ...