nyoj ACM:幸运三角形

DDR5内存Training全解析:从信号完整性到CS训练模式的实战指南 本文深入解析了DDR5内存Training的全过程,从信号完整性挑战到CS训练模式(CSTM)的实战应用。文章详细阐述了Training在DDR5高频时代的关键作用,对比了In-Band与OOB两种架构,并拆解了Intel MRC的核心训练步骤,为硬件与固件工程师提供了诊断与优化系统稳定性的实用指南。 阅读详情

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

这里写图片描述

如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2).

输入
有多组测试数据(少于20组)。
每行含一个整数n(0<n<20)。
输出
输出相应的幸运三角形个数。
样例输入
3
4
样例输出
4
6

dfs和 bfs 要想提高速度,降低复杂度,就必须尽可能的剪枝。

这个题我一开始用深度优先搜索dfs一边搜索,一遍判断是否矛盾。但是在n>=15,虽然答案是对的,但是严重超时。后来看了一下讨论区,被某位大牛给震惊了,竟然用操作二进制的方法解出来了。

我的代码dfs:

#include<iostream>
#include<cstdio>
#include<stack>

using namespace std;
int n=0;
int a=0,b=0;
bool NoMaoDun(stack<int> s)
{

    int ss[n+1][n+1];
    //stack<char> s=st;
    int size=s.size();
    int num=n;
    int i;
    for(i=1;i<=n;i++)
    {
        if(size>num)
        {
            size=size-num;
            num=num-1;
            continue;
        }
        break;
    }
    if(i==1)
        return true;
    int j=0;
    int k=size;
    j=size;
    size=i;
    for(i;i>=1;i--)
    {

        for(;j>=1;j--)
        {
            ss[i][j]=s.top();
            s.pop();
        }
        j=n-i+1+1;
    }
    j=k;
    for(i=size;i>=2;i--)
    {

        for(;j>=1;j--)
        {
            if((ss[i][j]==1 && ss[i-1][j]!=ss[i-1][j+1] ) || (ss[i][j]==0 && ss[i-1][j]==ss[i-1][j+1] ) )
                return false;
        }
        j=n-i+1+1;
    }
    return true;
}

int main()
{

    int flag=1;
    int num=0;
    int k;
    stack<int> mystack;
    bool qqq;
    while(scanf("%d",&n)!=EOF)
    {
        a=0;
        b=0;
        flag=1;
        num=0;

        if((1+n)*n/2%2==1)
        {
            printf("%d\n",0);
            continue;
        }

        mystack.push(1);
        a++;
        while(!mystack.empty()) 
        {
            mystack.push(1);
            a++;
            if((a+b)==(1+n)*n/2+1)
            {
                num++;
                //printf("a %d b %d \n",a,b);
                mystack.pop();
                a--;
                if(mystack.top()==1)
                {
                    mystack.pop();
                    a--;
                    mystack.push(0);
                    b++;
                    flag=0;
                }
                else if(mystack.top()==0)
                {
                    mystack.pop();
                    b--;
                    flag=0;
                }
            }

            if(a>(1+n)*n/4 || b>(1+n)*n/4)
                        qqq=true;
                else
                        qqq=!NoMaoDun(mystack);
            //qqq=!NoMaoDun(mystack);
            while((qqq || flag==0) && !mystack.empty())
            {
                flag=1;
                k=mystack.top();
                mystack.pop();

                if(k==0)
                {
                    b--;
                    flag=0;
                    continue;
                }
                if(k==1)
                {
                    a--;
                    mystack.push(0);
                    b++;
                }
                if(a>(1+n)*n/4 || b>(1+n)*n/4)
                        qqq=true;
                else
                        qqq=!NoMaoDun(mystack);
            }

        }
        printf("%d\n",num);

    }
    return 0;
}

大牛的思想:
我们可以用一个bit表示一个’+’或者’-‘,0表示‘+’,1表示‘-’。这样表示用一个整数表示一行。
比如,n=4,那么第一行的数s的枚举就是从数0到15,然后要根据第一行的数计算第二行的数,其实,第二行的数就是s^(s>>1),每一位和相邻位的异或,范围从0到7,再继续计算,直到最后一行的数为0或者1.也就是说,对n=4.建立一个s[4]的数组可以记录下每一行的数,而每一行得数也容易从上一行得到。接下来,问题就变成了计算每行代表的那个整数所代表的二进制数中1的个数。

按照大牛思想编写的代码:

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;

int main()
{
    int n=0;
    while(scanf("%d",&n)!=EOF)
    {
        int a[n];
        //0表示'-' , 1表示'+' 
        int num=0;
        int i;
        int k=0;//k记录1的个数 
        if((n+1)*n/2%2==1)
        {
            printf("%d\n",0);
            continue;
        }

        int q=pow(2,n);
        for(a[0]=0;a[0]<q;a[0]++) 
        {
            k=0;
            for(i=0;i<n;i++)
            {
                k+=0x01 & (a[0]>>i);
            }

            for(i=1;i<=n-1;i++) 
            {
                a[i]=a[i-1]^(a[i-1]>>1);

                for(int j=0;j<n-i;j++)
                {
                    k+=0x01 & (a[i]>>j);
                }

                if(k>(n+1)*n/4)
                        break;
            }
            if(i>=n && k==(n+1)*n/4)
                {
                    num++;
                }
        }
        printf("%d\n",num);
    }
    return 0;
}
SAP-FICO LSMW实战:批量导入财务凭证与固定资产主数据(AS91)的完整指南 本文详细介绍了SAP-FICO中LSMW工具在批量导入财务凭证与固定资产主数据(AS91)的完整流程与实战技巧。从基础概念、环境准备到财务凭证导入全流程,特别针对AS91历史资产导入的日期逻辑和关键字段映射提供了专项指南,并分享了常见错误排查与性能优化建议,帮助用户高效完成SAP数据迁移任务。 阅读详情

相关推荐

SiamRPN++实战:如何用深度孪生网络提升无人机目标跟踪精度(附代码)

本文深入探讨了如何利用SiamRPN++深度孪生网络构建适用于无人机平台的高精度、轻量化单目标跟踪系统。文章详细解析了其兼顾精度与效率的核心原理,并提供了从PyTorch模型轻量化、骨干网络替换到TensorRT部署及应对遮挡、光照突变等实际挑战的完整工程实践指南与代码示例。

weixin_29047545的博客 370

NYOJ491幸运三角形

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

Mr.zhou 275

FFT去除频率分量的完整流程与数学分析

重叠与窗口:确保块间无缝过渡,避免幅度跳变;实时缓冲:处理速度需快于数据输入速度,避免断流;DAC的平滑角色:通过数模转换和滤波,将离散样点还原为连续波形。通过这种分段处理+重叠拼接的方法,即使FFT本身处理的是离散数据块,最终DAC输出仍能保持信号的时间连续性。以下是完整的数学分析过程和代码逻辑,演示如何通过FFT去除特定频率成分,并通过去窗技术恢复信号。信号加窗。

林愿留的博客 1611

NYOJ 幸运三角形

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

Just Coding! 1287

移远EC800M CAT1模块HTTP POST实战:从AT指令到数据上报的完整避坑指南

本文详细介绍了移远EC800M CAT1模块通过AT指令实现HTTP POST数据上报的完整开发流程,包括模块初始化、PDP上下文配置、HTTP POST实现及优化策略。针对实际开发中的常见问题如网络异常、低功耗需求等提供了经过验证的解决方案,帮助开发者快速实现稳定可靠的物联网数据传输功能。

weixin_42556197的博客 481

WRF和WPS安装和编译时遇到的问题

检查是否自己netcdf和Fortran编译器一致。解决办法:修改configure.wps里的路径。如果没问题且wrf已成功编译,考虑重新。path修改为jasper在的路径。

m0_54898744的博客 1837

幸运三角形

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

梧桐下的四叶草 980

STM32定时器ARR寄存器详解:从‘水桶接水’到精准测速,你的PWM和编码器都靠它

本文深入解析STM32定时器ARR寄存器的核心原理与应用技巧,从PWM波形生成到编码器测速实战。通过水桶模型和硬件本质的比喻,揭示ARR如何作为定时器的'心跳节拍器',并详细探讨其在动态调频、死区时间配置和高精度PWM中的关键作用。特别针对编码器模式下的ARR配置和溢出补偿算法进行优化建议,帮助工程师提升系统性能和实时性。

weixin_33734785的博客 379

幸运三角形(nyoj 491)

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

23333333 978

光斑大小控制【ZEMAX操作数】

在使用Zemax优化光学系统时,对成像的聚焦光斑大小进行限制,即弥散斑的大小; 一、RSCE(质心RMS光斑半径):二、RSCH(光线RMS光斑半径):

yh的博客 7868

C#项目实战——YModem协议文件传输【实例】

1、先由上位机发送*update*的握手信号,下位机返回响应字符‘C’(字符C,ASII码为0x43),之后通信双方开始以YMODEM协议进行数据通信。2、 YMODEM协议格式说明(1)起始帧数据格式帧类型(1byte)帧序号帧序号反码传输的文件名文件大小数据CRCSOH00FFfilenamefileziseNULCRCSOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);00表示数据帧序号,初始是0,依次向下排。

做有价值的事,积累有价值的笔记! 3655

nyoj-491--幸运三角形--简单深搜枚举(TLE)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=491 悲剧啊,TEL了 #include #include int n,cnt,vis[30],dp[22][22]; int a,b; bool fun() { for(int i=0;i<n;i++) { for(int j=0;j<n-i-1;j++

风儿-zsj的专栏 1175

【ChangeCLIP】Remote sensing change detection with multimodal vision-language representation learning

ChangeCLIP论文及代码使用详解。持续更新变化检测最新论文,欢迎订阅本专栏。

向上生长的程序媛的博客 1338

NYOJ-491 幸运三角形

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

Justesss的专栏 1220

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

nyoj 491 幸运三角形 (dfs + 打表 出现木马 哈哈)

题目491 题目信息 运行结果 本题排行 讨论区 幸运三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述         话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相

苏苏爱自由 2185

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NYOJ491 幸运三角形(暴力DFS+打表,水)

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

riba2534的博客 636

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NYOJ 491 幸运三角形

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

weixin_30613727的博客 119

nyoj-----幸运三角形

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

weixin_30716141的博客 101

nyoj--491--幸运三角形(dfs)

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

playboy307 453

NYOJ 491幸运三角形

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=491 题意就是枚举第一行所有的情况,可以用深搜实现,可根据第一行逐行确定出下一行的状态,,然后算出每种情况两种符号的个数,在运算之前可以先进行一下判断,当(n+1)*n/2为奇数时,结果为零,因为倒置金字塔的符号总数为奇数,两种符号个数不可能相同,参考代码: #include

fire__ice的专栏 990

nyoj252 01串

01串 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。 注:01串的长度为2时,有3种:00,01,10。 输入第一行有一个整数n(0 随后有n行,每行有一个整数m(2 输出输出不含有“1

shengdai20的专栏 402

nyoj 491 幸运三角形

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=491 //////////////////////////////////////////// 此题最简单的算法就是打表,刚开始做的时候直接搜索,减了总数为奇数的情况,但还是TLE 无奈上网搜了下,但大部分都是打表,找了几个没有打表的,把代码粘上仍然是TLE 无奈看了看书,

傻子和石像的专栏 1205

ACM 三角形判断

三角形判断 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:1730            测试通过:273 描述 给定三条边的长度,判断能否组成三角形,如果可以,判断三角形的形状。 输入 一组数据,每行三个实数,在(0,10]之间,精确到小数点后第四位。最后以0 0 0表示结束。 输出 根据每行的数据判断,

我的博客 3144

题目491:幸运三角形

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=491描述话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况): 如

杨林峰的笔记 381

HDU 2510 符号三角形 NYOJ491 幸运三角形

符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 860    Accepted Submission(s): 437 Problem Description 符号三角形的 第1行有n个由“+”和”-“组

长风的专栏 1283
上一篇: nyoj ACM:吝啬的国度(bfs)
下一篇: 开源网站收集
丁磊_Ml
博客等级 码龄11年 95粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值