nyoj 幸运三角形
幸运三角形
- 描述
-
话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况):

如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2).
- 输入
- 有多组测试数据(少于20组)。
每行含一个整数n(0<n<20)。 - 输出
- 输出相应的幸运三角形个数。
- 样例输入
-
3 4
- 样例输出
-
4 6
参考大神的代码写的:
#include <iostream>
#include <cstring>
using namespace std;
int n,half,counter,sum;
char **c;//二位数组,存放每个位置的符号
void dfs(int t)
{
if(t>n)
sum++;
else
for(int i=0;i<2;++i)//0代表+ ,1代表-
{
c[1][t]=i;//第一行的第t个字符(从第一个开始,第0列不用)
counter+=i;//统计'-'字符的个数
for(int j=2;j<=t;++j)//只有第一行的字符多于两个的时候 ,下面一行才能有字符
{
c[j][t-j+1]=c[j-1][t-j+1]^c[j-1][t-j+2];//^异或相同为0也就是'+',不同为1也就是'-'
counter+=c[j][t-j+1];//统计'-'字符的个数
}
if((counter<=half)&&(t*(t+1)/2-counter<=half))
dfs(t+1);//如果'-'或'+' 的个数少于一半,在第一行增加下一个符号。
//如果 '-'或'+' 的个数多于一半,回溯判断下一个符号
for(int j=2;j<=t;++j)
counter-=c[j][t-j+1];
counter-=i;
}
}
int main()
{
while(cin>>n)
{
counter=sum=0;
half=n*(n+1)/2;//从上往下每行的个数依次减一,算是个等差数列,等差数列的前n项和的一半。
if(half%2==0)//必须是偶数,两种符号的个数才能个占一半
{
half/=2;
c=new char *[n+1];//动态申请二维数组的存储空间,行
for(int i=0;i<=n;++i)
{
c[i]=new char[n+1];//列
memset(c[i],0,sizeof(char)*(n+1));//每行依次清零,
}
dfs(1);
}
cout<<sum<<endl;
}
return 0;
}
nyoj 幸运三角形的更多相关文章
- NYOJ 491 幸运三角形
幸运三角形 import java.util.Scanner; public class Main{//搜索 static int sum=0,n; public static void main(S ...
- NYOJY 491 幸运三角形
描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同 ...
- 幸运三角形 南阳acm491(dfs)
幸运三角形 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒 ...
- nyoj 67 三角形面积【三角形面积公式】
三角形面积 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积 输入 每行是一组测试数据,有6个 ...
- NYOJ--491--dfs(打表水过)--幸运三角形
/* Name: NYOJ--491--幸运三角形 Author: shen_渊 Date: 15/04/17 16:26 Description: DFS超时,深搜出第一行的所有情况,计算之后打表水 ...
- NYOJ 67 三角形面积(线代,数学)
三角形面积 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积 输入 每行是一组测试数据,有6个 ...
- NYOJ 815 三角形【海伦公式】
/* 关键点:海伦公式 解题人:lingnichong 解题时间:2014-10-04 21:48:47 解题体会:海伦公式的使用 */ 三角形 时间限制:1000 ms | 内存限制:65535 ...
- nyoj 274-正三角形的外接圆面积 (R = PI * a * a / 3)
274-正三角形的外接圆面积 内存限制:64MB 时间限制:1000ms 特判: No 通过数:14 提交数:22 难度:0 题目描述: 给你正三角形的边长,pi=3.1415926 ,求正三角形的外 ...
- nyoj--491--幸运三角形(dfs)
幸运三角形 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成('+'或者'-'),图形的最上层有n个符号,往下个数依次减一,形成倒置的 ...
随机推荐
- python 小练习12
给你一个整数数列a1,a2,a3,...,an,请你修改(不能删除,只能修改)最少的数字,使得数列严格单调递增. 数列存储在列表L中,你可以直接使用L,L的长度小于100000. 注意:必须保证修改后 ...
- 无法打开物理文件“E:\Database\VRVIES6841-FZ01-Global\VRVEIS.mdf”。操作系统错误 5:“5(拒绝访问。)”
在用SQLServer2012附加SQLServer2000备份的数据库事,报如下错误: 无法打开物理文件“E:\Database\VRVIES6841-FZ01-Global\VRVEIS.mdf” ...
- 在linux中,如何增加、修改、删除、暂停和冻结用户名
在Linux中,如何增加.修改.删除.暂停和冻结用户名 在操作增加.修改和删除用户名前,先认识linux中两个最重要的文件,它们就是账号管理最重要文件“/etc/passwd”与“etc/shadow ...
- HeaderExchangeClient
HeaderExchangeClient 注释是DefaultMessageClient,类中定义了心跳定时器HeaderExchangeChannel 发送请求HeaderExchangeHandl ...
- Nginx在windows上安装 及 Nginx的配置及优化
https://www.cnblogs.com/Chiler/p/8027167.html http://www.runoob.com/linux/nginx-install-setup.html 前 ...
- duilib CEditUI 禁止输入中文字符,禁止复制粘贴
1.CEditUI 禁止使用中文输入法 在 CEditUI::DoEvent 函数中,添加代码: if(m_bOnlyEnglishChar && m_pWindow &&am ...
- SQL Server 调优系列基础篇 - 性能调优介绍
前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...
- 【译】MVC3 20个秘方-(15)使用CAPTCHA去防止恶意软件自动提交评论(防灌水)
[译]MVC3 20个秘方-(15)使用CAPTCHA去防止恶意软件自动提交评论(防灌水) 问题 有种不太幸运的情况,有人用自动程序去提交表单,在整个互联网中造成大量的垃圾.为了防止这种情况的方法 ...
- 浅谈:从为什么学习python到如何学好python
虽然目前的编程语言有很多,但是基础语法上的概念,本质上都是相通的.可以做到一通百通.所以没有必要为了学哪门语言纠结太多. python是目前市面上,我个人认为是最简洁&&最优雅& ...
- java设计模式 略版
<转> 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结 ...