1.题意描述

给定边长为1,2,3,····n的n条边,现在要在里面任意选取三条边构成三角形,我们需要求一共可以构成多少个三角形?

2.题目分析

首先我们分析数据大小问题,由于数据最大可以达到10^6。所以我们如果直接枚举时间复杂度可以达到O(n^3),那么我们可以肯定的说这个时间复杂度肯定是不能承受的。

那么我们可以根据前面求整理的排列组合公式的求二项式系数的方法联想到使用递推法。这样时间复杂度可以降低到O(n)。这是可以承受的。要想用递推法,我们肯定需要使用打表的方法----预处理,那么空间复杂度肯定是O(n)同样可以承受。现在我们分析怎样使用递推法:

我们先定义一个函数f(n):当最大编程为n时所能构成的三角形数目。

对于三角形的三边而言,我们可以设定为x,y,z。并且我们假设x是最大边。那么我们有y+z>x,因此可以推出x-y<z<x。

根据这个不等式我们有,当y=1时,显然无解;当y=2时,有一个解;当y=3时,有两个解;·····当y=x-1时有x-2个解。根据等差数列求和公式我们有一共有

0+1+2+······+(x-2)=(x-1)(x-2)/2。但是我们需要注意,这里包含了y=z情况。那么我们需要减去从y=x/2+1开始到y=x-1为止,此时我们多计数了(x-1)-(x/2+1)+1=(x-1)/2个解,而且除此之外,我们对于每一个y我们都有重复计数,因为前后是对称的。所以我们最后还要除以2得到最终结果。

最终结果为:

那么最后的递推式我们可以写为:

到这里基本分析完毕。

wa的第一点  数组超了,后面还存了10000005

wa的第二点  数据爆了,不要强制转换,直接定义i为longlong 

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 using namespace std;
 5 long long f[1000001];//wa的第一点  数组超了,后面还存了10000005
 6 int main()
 7 {
 8     //先打表预处理
 9     f[3]=0;
10     for(int i=4;i<=1000005;i++)
11     f[i]=f[i-1]+(long long)(((i-1)*(i-2)/2-(i-1)/2)/2);// wa的第二点  数据爆了,不要强制转换,直接定义i为longlong
12     int n;
13     while(~scanf("%d",&n))
14     {
15         if(n<3)
16         break;
17         cout<<f[n]<<endl;
18      }
19  } 

ac代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
long long f[1000010];
int main()
{//先预处理f[3]=0;for(long long i=4;i<=1000005;i++)f[i]=f[i-1]+((i-1)*(i-2)/2-(i-1)/2)/2;int n;while(~scanf("%d",&n)){if(n<3)break;cout<<f[n]<<endl;} }

  

转载于:https://www.cnblogs.com/Aiahtwo/p/10921530.html

uva 11401思维+预处理相关推荐

  1. 图论 ---- F. Graph Traveler 记忆化搜索 + 思维预处理(数论同余恒等式)

    题目链接 题目大意: q∈[1,1e5],n∈[1,1000],mi∈[1,10]q\in[1,1e5],n\in[1,1000],m_i\in[1,10]q∈[1,1e5],n∈[1,1000],m ...

  2. UVA 11401 Triangle Counting(详解)

    Triangle Counting 分析一下 以八为例子 1 2 3 4 5 6 7 8 以(7,8)为边,就有6 7 8, 5 7 8, 4 7 8 ,3 7 8 ,2 7 8 五种情况: 以(6, ...

  3. GCD LCM UVA - 11388 (思维。。水题)

    两个数的最小公倍数和最大公约数肯定是倍数关系 然后又让求使得a最小  因为 a = m * gcd 令m = 1 时 a取得最小  即gcd 则b = lcm #include <iostrea ...

  4. UVA 11401 - Triangle Counting

    Problem G Triangle Counting Input: Standard Input Output: Standard Output You are given n rods of le ...

  5. 数三角形Triangel Counting UVa 11401()

    题意 给定一个整数n,有多少种方法可以从1.2.3...n中选择元素构成三角形? 分析 我们设三角形的三边长度分别为x, y, z,若我们假设x是最长边,,因为我们规定了x是最长边,所以根据加法原理, ...

  6. Triangle Counting【数学】

    Triangle Counting UVA - 11401 题目传送门 题目大意:输入一个整数n,求在1到n中选取三条边能够组成多少种三角形. AC代码: #include <cstdio> ...

  7. π-Algorithmist分类题目(1)

    原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(1) Sorting UVAL ...

  8. 2022上海省赛(A,E,G,H,M,N)

    CSDN话题挑战赛第2期 参赛话题:算法题解 写一下签到和对标到区域赛铜牌级别的题目,m题大概是铜牌偏上一点吧. A. Another A+B Problem(暴力/搜索) 猜成语游戏 题意:给一个两 ...

  9. 图论算法与模型(训练指南题库)

    一.基础题目 1.UVA 11624 Fire!迷宫问题 多源BFS 题意: 帮助joe走出一个大火蔓延的迷宫,其中joe每分钟可往上下左右四个方向之一走,所有着火的格子都会蔓延(空格与着火格有公共边 ...

最新文章

  1. ci mysql 事务_MySQL事务-学习笔记
  2. 算法的复杂度与Master定理
  3. FFmpeg 音视频处理总纲
  4. Java程序员已经饱和了,还有必要培训Java编程嘛
  5. Parallel Computing–Cannon算法 (MPI 实现)
  6. JDBC衔接DB2、Oracle、MySQL、PostgreSQL
  7. 126 MySQL存储引擎概述
  8. 加固社交关系 派派“场景+娱乐”模式异军突起
  9. 二、Json对象、Json数组和Json字符串
  10. 鲁瑜计算机,程序员计算器.pptx
  11. 我们为什么需要实施实验室管理系统?
  12. h5支付java_对接微信H5支付(Java)
  13. Md5,base64加密
  14. UI app界面的尺寸规范
  15. 泛在传感器网络(Ubiquitous Sensor Network; USN)
  16. 微信公众号项目笔记 二
  17. 阿里云天池龙珠计划 sql篇---stack06
  18. allegro 问题
  19. 哪吒GT:200万以内最好的纯电跑车,售价17.88万元起
  20. 计算器ajax实现代码,jQuery实现计算器功能

热门文章

  1. UEFI+GPT与BIOS+MBR各自有什么优缺点?
  2. 集合 setfrozenset
  3. TCP连接(client、server)状态转换
  4. Activity 在横竖屏切换情况下的生命周期变化
  5. 集群、负载均衡、分布式
  6. Concurrent实现原理
  7. 人工智能中的局部搜索算法
  8. 一 WebService 简介
  9. Mysql的row_format
  10. matlab 中max函数用法