代码参考自:xyz111

题意: 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:
勇太有一根长度为n的木棍,这个木棍是由n个长度为1的小木棍拼接而成,当然由于时间放置的久了,一些小木棍已经不牢固了,所以勇太想让六花把这个木棍分成正整数长度的4段,其中有3段要没有不牢固的小木棍,勇太希望这3段木棍的长度和可以最大。同时六花希望在满足勇太要求的情况下让这三根木棍能拼成一个三角形,请问萌萌哒六花有多少种可行的分割方案呢?
当然,这个问题对于萌萌哒六花来说实在是太难了,你可以帮帮她吗?

分析:先求出所有不牢固小木棍中最左边的位置L和最右边的位置R,可以确定的是其中一段一定是[L,R]。由于只有一段含有不稳定的,所以一定是L,R,自己写的时候就没想到

接着分两种情况考虑:
1.L=1或R=n
这样剩下的三段是由一整段木棒截来,我们可以枚举最左边一段的长度,这样可以得到一个关于第二段木棍的不等式,稍微讨论一下即可。

这里的讨论需要详细介绍一下

在这里,我们枚举最左边的线段长度为x1,如图

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAw8AAAFGCAIAAACjdjQMAAANQ0lEQVR4nO3d2ZbquBIFQP7/p7kP9K3FAZOeNKYinrspSSmlN8ZwHk8AAH579B4AAMDQpCUAgIi0BAAQkZYAACLSEgBARFoCAIhISwAAEWkJACAiLQEARKQlAICItAQAEJGWAAAi0hIAQERaAgCISEsAABFpCQAgIi0BAESkJQCAiLQEABCRlgAAItISAEBEWgIAiEhLAAARaQkAICItAQBEpCUAgIi0BAAQkZYAACLSEgBARFoCAIhISwAAEWkJACAiLQEARKQlAICItAQAEJGWAAAi0hIAQERaAgCISEsAABFpCQAgIi0BAESkJQCAiLQEABCRlgAAItISAEBEWgIAiEhLAAARaQkAICItAQBEpCUAgIi0BAAQkZYAACLSEgBARFoCAIhISwAAEWkJACAiLQEARKQlAICItAQAEJGWAAAi0hIAQERaAgCISEsAABFpCQAgIi0BAESkJQCAiLQEABCRlgAAItISAEBEWgIAiEhLAAARaQkAICItAQBEpCUAgIi0BAAQkZYAACLSEgBARFoCAIhISwAAEWkJACAiLQEARKQlAICItAQAEJGWAAAi0hIAQERaAgCISEsAABFpCQAgIi0BAESkJQCAiLQEABCRlgAAItISNPJ4PB4PJw5gPno3NCIqAUxK+4ZGpCUG9/ih97igP8cAWnDJYXDBFpWZwAFgdQ3eTLvSrCPrjZk0E4FrHADYUPY650qzgl97Jk1myjELuMbuh5+KXB5cYxYRf5LVciT1pJkInGXrw0/SEsfFhXaHCaZm30Pk5rXBpWURBwudYz+kSX5H/PqeYLLn0til0rDjTkPUTHO7cMlMsyWOB8R5p3xk5FNPkOPUGPZd7obaaGJ2xe5E0sx0l8yUnurCIRdaoe6ZmDuOTz/R9OV7ygsuQlYKCUcdvwCsealYx/3iptkev340of1IBvEx95WXIhmFHJEDNrKDjzI0GAltvFezVA7OtEPcUHknLWWlkCNywEYmLa3mIy0Vf80EaizRpKSlrBRyRA7Y4HZ/WafZSGigUhRItk9e00k2qWv+FsFqZKKWt1T64Q1nbHDS0lL+ckDZyubbJ/lmdI20lJJaXlfp03oHbArBtVMFk6l01yTTPvk7DpkmdYfveeSjnCVJS0uRlhZR78qXY6t4aOmD4JiSchZ284Q4YHPxbaD0ql75cuwWzzV/kJZSUs7y/GzdOj7uOihfPlU/UsmxYTbfM+SY2gUaQlZqWcWFQ7Jyf5mdhzoTk5ZiwRQSzO4st9kSU8tazp4T52pq7r1nJS0FfDn0g4/mE1PIio73WScqAXcHU5KWftkd/NSzO+vXPllqEXJTyOqOnBYnKgFpKaW+aelRTe2Rn/rPNv/Hlq4N8sg07784g1DI6o6cFicqgYcP49IpcimNX7/ei1dydk1mnONZ0tIKFLKF+MA4TrN7v36oZia1qznjbjk75hnneIr2vgiFbMSbj6y+y6egaUhL3y6MecZpHictLUIh29k8Ns7S7KSlxKSlD9cGPN00T9mdXe7pr0MVm3JlzWezpsqaQIM6zrVVLg91ojme5bHUdahia+8nxylK4FcRFXd2zaLMFFvl5iCnmONZByeVcu4LUsUOPBGchsfRsmr5DccptkrVtDTFCnyTlpaiin2U+p0P+kp5DeApLf2ryAiTvbU4PuYZZ8c3VexGWpqdpzsTk5beSUvf/OjUapSwG2lpap7uzE1aelcqLaV5yM+PTi1ICTvwY4YJeGQhN2npT9nh5fghFWlpQUrYmh8RyEFayk1aetZ5vDJBWrow2uCm2rfbA6QKhWlNWkrAIwvpSUuVRjV7Wro21OMfQU60FKtRmKbSfGy/OGkpPWmp0g0PaanG69OAwjSV7FshC7p25VDc6bT8TGSp7SEtVfoT1KYqTcXHoNQXT+6/CJsur+3xh5w8xLCgpao8dVqq3QFu/hWqUpV2jpyB++fESaunTa/8+B8VNL2lSiwt1fsrVKUqjTT73NpJq6RXXRSUNOZ9cPPm+xZpKQFVaaTZaXHSKrmflho88QAjmzQtNb7lP/hqLEtVWji7+++8j3HSaii1qteeEFdTEgh28sg7vP3jpCOvxspUpa47dxTcihhHx7RU8K9DRyt/I1haSkBV6mr/sIuTVlzBJZWWWFODrwOPTFpKQFUq6vIFNyetrLLrKS2xJmmp+H9JYwpTS68fT3LYyhohLRUfBrS0u3tt7z+WYlgKU0vBJ13cxe2o+Hq6vQQfVt7ej3/1Hg4/qU15NTb98dd03gqqsZjXtoeyktiy23vZic9IqcqrdwCOvLLjV0rVOl74UYlKgwG6cDNpLkpVWNXdLy01M9oyjjYe4Cb9fC49K5Hvk9oGc/G8ZBujLeNo4wFuehzQe4xXTD34QLf5JNgTH3LMgpfRqjnaeAC+5buy/5GWCkgwBd4NWM0BhwTwIdOV/YO0dNfUgy9OQSv5GNXsiwyklObK/k1aumvqwZeVo6ZjjvxvVFOvLZBbjqvAJmnplnlHXoOa1vMa1VALO3uhgeIeX3qPqBhp6bpJh12PmtYw5pImqDVQQ9bmIC1dNOOYa5u9ps/ByjrySiaoNVBD1uYgLV0x3YDbmLqmL+MMe5yRbEpQa6CGrM1BWqKYBDUdYdhTrF6CWgM1ZG0O0hLFqOlNEy2dWgObsjYHaYli1HQdag1senzpPaIypCWKUdN1qDXwS8r+0Gca39kTAMinS8worsM0ehcOAGinfdIoTloCACpqnzSKk5YAgIraJ43iPLcEANTSJWYU13MayZYSAEhJUgEAiEhLAAARaQkAICItAQBEpCUAgIi0BAAQkZYAACLSEgBARFoCAIpJ+aPTCacEALSX+N/nyDkrAKClrDnpJfPcAIAGckelp7QEANyRPio9pSUA4A5pCQDgpxWi0lNaAgCuWSQqPaUlAOCsxD8WsGmhqQIAdzz+r/dAWltuwgDANQvmpJdFpw0AnLJsVHpKSwBAbM1P394tPXkAYNfiUekpLQEAm5Z9pvubJQAAPglJ76wFAPAPUemD5QAA/iEtfbAcAMB/PKi0yYo09aip9+QAmJtLyS+jrEvVGDGOLmtY9Y8CMDvXi11DLI0KVTVgsAOgOw3/OGvEBocHICXviq+xWGxzFwogBx37PgvHXfITwJj05FIsIuVJTgAFHb/Z771rJZaSuhzj1SguXKNbjkwN6EY7mMXZ97KqCX9OnR2GpTyMQvsYzeUqKBwrkIGWopAMTbvp6PLKKxkrsM+XothMwJu2TQff2l52c2ylpgnd6T+oNxNrdu0fwVwz2h1ey+gGB9l+/GITsIoZr8eDDy9wJC2dfcHx68WkbCp22Rzwn/Z3OGYMcAcFgy81tSP1SrCSFGF7cJNdAiecukKvfAkPZtdl4s0WvOwOoZQGpSc3ewgo79f1qe91y1UZuMbZBsobMy0BXKNzAeVtpiJRCZiU5gWUJy0BmWheQHnfwUhUAualfwHlSUtAJvoXUN5HNhKVgKlpYUB50hKQiRYGlCctAZloYUAVfrMRSEMXAwCISEsAABFpCQAgIi0BAESkJQCAiLQEABCRlgAAItISAEBEWgIAiEhLAAARaQkAICItAQBEpCUAgIi0BAAQkZYAACLSEgBARFoCAIhISwAAEWkJKOlxRu/BAhyiWwEFXAtAAhMwBa0KuOty6JGWgCloVcBdd0KPwASMT58CNpx6wOhm4hGYgMFpUsCOOM0UyTqe+wZGpjcBO4IQUzzfCEzAgDQmYMevBFMj2UhLwIA0JmBHy7RU72UBLtOVgB2b8aVeppGWgNHoSsCO7/hSNdBIS8BodCVgx0d8aZBmBCZgKFoSsENaAhanJQE72qelZn8F4Aj9CNjxHlyahRhpCRiHfgTskJaAxelHwI6/4NIywUhLwDj0I2BHl7TU/s8B/KIZATukJWBxmhGw45Va2meXx+MhMAEj0ImAHb3S0vtfB+hIGwJ2SEvA4rQhYIe0BCxOGwJ2SEvA4rQhYIe0BCxOGwJ2SEvA4rQhYIe0BCxOGwJ29P3dI2kJ6E4bAnZIS8DitCEg0vdjuL5/GuBFGwIi0hKANgREpCUAbQiIdP+nbaUloDttCIhISwDaEPBT96j0lJaAAWhDwE8jJJURxgAsThsCto1wY+kpLQED0IaAbdISwIs2BGyTlgBetCFg2yAxZZBhACvThoBtg8SUQYYBrEwbArYNElMGGQawMm0I2DZITBlkGMDKtCFgaNIS0J02BAxNWgK604aAoUlLQHfaEABARFoCAIhISwAAEWkJACAiLQEARKQlAICItAQAEJGWAAAi0hIAQERaAgCISEsAABFpCQAgIi0BAESkJQCAiLQEABCRlgAAItISAEBEWgIAiEhLAAARaQkAICItAQBEpCUAgIi0BAAQkZYAACLSEgBARFoCAIhISwAAEWkJACAiLQEARKQlAICItAQAEJGWAAAi0hIAQERaAgCISEsAABFpCQAgIi0BAESkJQCAiLQEABCRlgAAItISAEBEWgIAiEhLAAARaQkAIPI/2MneZEjMG48AAAAASUVORK5CYII=" 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. 原始套接字-TCP/IP下三层数据显示

    #include <stdio.h> #include <errno.h> #include <unistd.h> #include <sys/socket. ...

  2. python AjaxSpider 代码演示

    import re # 引入正则表达式 import json # 引入 json import pymongo # 引入mongo数据库 import requests # 引入HTTP请求协议 f ...

  3. keepalived vrrp_script脚本不执行解决办法

    首先打开日志观察: tail -f /var/log/messages 然后新开一个客户端重启keepalived , systemctl restart keepalived.service 看日志 ...

  4. Quartus II 破解教程—FPGA入门教程【钛白Logic】

    这一节主要说明如何破解Quartus II 13.1.首先找到我们提供的破解工具,这里我们的电脑是64位的,所以使用64位破解器.如下图. 第一步:将破解工具拷贝到安装目录下“D:\altera\13 ...

  5. 通过图片获取gps地理位置

    别人说通过一张照片就可以定位你的位置,看来个视频,仔细研究了一下自己的照片没想到真的可以做到,想想真的有点可怕. 如何通过一张照片去定位这张照片的经纬度下面我以我手机中的照片为例. 我们通过pytho ...

  6. Number of Airplanes in the Sky

    Given an interval list which are flying and landing time of the flight. How many airplanes are on th ...

  7. springcloud使用Hystrix实现微服务的容错处理

    使用Hystrix实现微服务的容错处理 容错机制 如果服务提供者相应非常缓慢,那么消费者对提供者的请求就会被强制等待,知道提供者相应超时.在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者 ...

  8. C++的那些事 1

    最近在看c++的一些库文件,里面的一些比较陌生但看起来挺有用的一些东西,在此记下,以免日后看到再翻找资料. template <size_t _Nb> 这是在看bitset的时候看到的,之 ...

  9. 关于阿里云和ucloud云服务器负载均衡器slb和ulb会话保持的配置

    在阿里云slb或者ucloud的ulb上对公司网站后台做了负载均衡以后,发现经常需要重新登录,单独访问没有这样的问题,问题就出在session的保持上,在云控制台中有配置会话的相关选项 阿里云的配置 ...

  10. three.js 初探

    2014年3月3日 22:18:40 简单旋转立方体: http://blog.163.com/hailin_xin/blog/static/21816219020136103402812 简单球体入 ...