纪中17日T1 2321. 方程

纪中17日T1 2321. 方程

(File IO): input:cti.in output:cti.out

时间限制: 1000 ms  空间限制: 262144 KB  具体限制

Goto ProblemSet

题目描述

输入

输出

样例输入

样例输出

数据范围限制

提示

吐槽

这些图片太模糊了吧……

还有那吓人的 mod 998244353

都使得我们对这道题的恐惧感叠加了998244353层……

没想到……只有三种答案!(三进制呵呵哒)

Solution

(约定:用line[i]表示第i个输入的数据,man[i]表示在第i位是否为男生(i from 1 to n))

step1

先对line[1]进行判断:

  若line[1]==0

    直接dfs

  若line[1]==1

    进行两遍dfs,其中一遍man[1]=1,另一边man[2]=1;

  若line[1]==2

    一遍dfs,man[1]=man[2]=1;

if(line[1]==1){
    man[1]=1;
    dfs(1);
    memset(man,0,sizeof(man));
    man[2]=1;
    dfs(1);
    }
if(line[1]==0) dfs(1);
if(line[1]==2){
    man[1]=man[2]=1;
    dfs(1);
}

处理完在边缘位置的line[1]后,接下来就好操作了。

step2

写dfs

int t,n,ans,line[1000000];
bool man[1000000];
IL void dfs(int depth)
{
    int now=0;
    if(depth>1) now+=man[depth-1];
    if(depth<n) now+=man[depth+1];
    now+=man[depth];
    if(now!=line[depth]) return;
    if(depth==n){
        ans++;
        return;
    }
    man[depth+2]=1;
    dfs(depth+1);
    man[depth+2]=0;
    dfs(depth+1);
}

step3

按照题目的意思

怎么看上去像打了马赛克呢……

这个快读是专门给line的!

IL int read()
{
    char ch=getchar();
    while(ch<‘0‘||ch>‘5‘)
    {
        ch=getchar();
    }
    return (int)ch^48;
}
for(int i=0;i<=n;i++)
            line[i]=read();

step4

输出答案

printf("%d\n",ans/2);

别问我为什么要除以2

自己去推到dfs的结果吧。

我已经被接下来的问题折磨疯了……

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#define IL inline
using namespace std;
int t,n,ans,line[1000000];
bool man[1000000];
IL void dfs(int depth)
{
    int now=0;
    if(depth>1) now+=man[depth-1];
    if(depth<n) now+=man[depth+1];
    now+=man[depth];
    if(now!=line[depth]) return;
    if(depth==n){
        ans++;
        return;
    }
    man[depth+2]=1;
    dfs(depth+1);
    man[depth+2]=0;
    dfs(depth+1);
}
IL int read()
{
    char ch=getchar();
    while(ch<‘0‘||ch>‘5‘)
    {
        ch=getchar();
    }
    return (int)ch^48;
}
int main()
{
//    freopen("cti.in","r",stdin);
//    freopen("cti.out","w",stdout);
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        ans=0;
        memset(man,0,sizeof(man));
        for(int i=1;i<=n;i++)
            line[i]=read();
        if(line[1]==1){
            man[1]=1;
            dfs(1);
            memset(man,0,sizeof(man));
            man[2]=1;
            dfs(1);
        }
        if(line[1]==0) dfs(1);
        if(line[1]==2){
            man[1]=man[2]=1;
            dfs(1);
        }
        printf("%d\n",ans/2);
    }
    return 0;
}

Problem

我不能通过#9!

运行时错误?

我又调试了很久很久……

发现了一个叫“段错误”的东西

program received signal SIGSEGV,segmentation fault

有些内存是内核占用的或者是其他程序正在使用,为了保证系统正常工作,所以会受到系统的保护,而不能任意访问。

或者时数组越界……

老师正在看另一个老师打游戏,不想理我……

哼唧……

原文地址:https://www.cnblogs.com/send-off-a-friend/p/11369831.html

时间: 2024-10-07 19:36:02

纪中17日T1 2321. 方程的相关文章

纪中10日T1 2313. 动态仙人掌

纪中10日 2313. 动态仙人掌 (File IO): input:dinosaur.in output:dinosaur.out 时间限制: 1500 ms  空间限制: 524288 KB  具体限制 Goto ProblemSet 题目描述 沙雕游戏……反正我没玩过…… 输入 输出 样例输入 数据范围限制 Solution 考试时想的是对的 为什么就是没有分呢? 首先看看仙人掌有几种情况 situation1 两个比较分开的仙人掌…… 小恐龙按照这样走(跳),并没有什么特殊操作.这时的最

纪中10日T1 2300. 【noip普及组第一题】模板题

2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述 输入 输出 样例输入 样例输出 数据范围限制 朴素算法 考试开始的前一个小时我一直在折腾朴素算法 -> 对拍 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 #define IL inline 4 usin

纪中23日c组T3 2161. 【2017.7.11普及】围攻

2161. 围攻 (File IO): input:siege.in output:siege.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto ProblemSet 题目描述 经过刘邦的严密缉查,项羽的位置也就水落石出了.刘邦便趁机集合军队,进行对项羽的围攻.为了增加胜率,张良研究出一种全新的战法,目的就是一举打败难缠的项羽.  这种军队共有N个单位,一个接着一个排成一排,每个单位可以是士兵,或者是战车,这样的组合可以爆发出意想不到的强大战斗力:但有一

纪中20日c组T2 2122. 【2016-12-31普及组模拟】幸运票

2122. 幸运票 (File IO): input:tickets.in output:tickets.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto ProblemSet 题目描述 给你一个数N(1<=N<=50),每张票有2N位,同时给你这2N位上的和S,如果这张票的前N位的和等于后N位的和,那我们称这张票是吉祥的,每一位可以取0-9. 你的任务是计算吉祥票的总数. 输入 输入N和S,S是所以位上的和,假设S<=1000 输出 输出吉祥票

纪中5日T3 1566. 幸运锁(lucky.pas/c/cpp)

1566. 幸运锁(lucky.pas/c/cpp) 题目描述 有一把幸运锁,打开它将会给你带来好运,但开锁时需要输入一个正整数(没有前导0).幸运锁有一种运算,对于一个正整数,返回他的相邻两位数字间的差,如1135,运算结果为22(会去掉前导0). 现在已知只有经过反复运算最终结果为7的数才能打开这把锁,给你一个区间[a,b],问该区间中有多少个能打开幸运锁的幸运数. 输入 第一行两个整数a,b. 输出 一个整数K,表示共有多少个这样的数. 样例输入 1 10 样例输出 1 数据范围限制 [限

纪中10日T3 2296. 神殿 bfs

原文地址:https://www.cnblogs.com/send-off-a-friend/p/11330414.html

纪中……结束了……

纪中25日 纪中二十多天的生活,就这样结束了. 带着没有离开c组的遗憾,结束了. 算是日久生情吧,中山纪念学校,于我而言,已经成为了一段无法忘记的记忆. 但是……仅仅只能一遍又一遍的回忆了. 科学馆三层楼的机房,是我们一起学习的地方,有说笑,有模拟赛:有爆零,有AK. 最重要的还是,大家都在一起,有陪伴吧. 同来望月人何处,风影依稀似去年. 原文地址:https://www.cnblogs.com/send-off-a-friend/p/11407424.html

滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月17日)

滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfryf/p/4612609.html 优步奖励低/不挣钱/怎么办?看这里:http://www.cnblogs.com/mfryf/p/4642173.html 打豪车应用:uber详细攻略(附100元优惠码:DL8T6):http://www.cnblogs.com/mfryf/p/4752167.h

高级学员:2015年10月17日作业

高级学员:2015年10月17日作业: 1.要约.要约邀请.承诺的定义,及你的理解: 2.项目配置管理的任务.P319 3.配置项版本号规则是什么.15.5.2 4.写论文,按要求,摘要不超过400字,正文不超过2750字,请写以下2篇之一:范围管理.成本管理.请任写一篇,另一篇写提纲. 1.要约.要约邀请.承诺的定义,及你的理解: 要约是希望和他人订立合同的意思表示,该意思表示应当符合下列规定:(一)内容具体确定:(二)表明经受要约人承诺,要约人即受该意思表示约束.(投标文件属于要约,乙方想和