首页 > 其他分享 >洛谷 统计天数 + 语句解析 题解

洛谷 统计天数 + 语句解析 题解

时间:2024-08-03 18:55:36浏览次数:11  
标签:语句 10 cnt 洛谷 int 题解 cin mx 赋值

题目:

P1567 统计天数

P1597 语句解析

第一道:P1567 统计天数

题目描述

炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。

经历千辛万苦,他收集了连续 N(1≤N≤10^6) 天的最高气温数据。

现在,他想知道最高气温一直上升的最长连续天数。

输入格式

第 1 行:一个整数 N 。1≤N≤10^6

第 2 行:N个空格隔开的整数,表示连续 N 天的最高气温。0≤ 最高气温 ≤10^9 。

输出格式

1 行:一个整数,表示最高气温一直上升的最长连续天数。

输入输出样例

输入 #1

10
1 2 3 2 4 5 6 8 5 9

输出 #1复制

5

在讲思路前,我想吐槽一下,题目这两个数据太不真实了!

1.注意到天数是≤10^6的(即≤1000000),那么我们把这个数换算成年得到......2739.72602739!(一年按365天计算)这KC也太牛了吧,收集将近3000年!

2.气温≤10^9!40°C就热死了,你跟我说10亿度?!

吐槽完毕,下面——上思路!

思路1(WA):

这题好简单!不就是遍历一下,取个最大值吗?轻轻松松拿下90分

WA代码:
#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main()
{
	int n;
    cin >> n;
    for(int i=0;i<n;i++)
    {
        cin >> a[i];
    }
    int mx=-1,cnt=0;
    for(int i=1;i<n;i++)
    {
        if(a[i]>a[i-1])
        {
            cnt++;
        }
        else
        {
            mx=max(mx,cnt);
            cnt=0;
        }
    }
    cout<<mx+1;
	return 0;
}

一气之下差点下载数据!后来发现了一组错误样例,如下:

10
1 2 3 4 5 6 7 8 9 10

思路2(AC):

上面样例输出是0!!!后面发现,最后没有更新mx,要是他最后温度一直上升,还超过了历史最长天数,那不就完犊子了?最后更新一下mx,应该对了吧!

AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main()
{
	int n;
    cin >> n;
    for(int i=0;i<n;i++)
    {
        cin >> a[i];
    }
    int mx=-1,cnt=0;
    for(int i=1;i<n;i++)
    {
        if(a[i]>a[i-1])
        {
            cnt++;
        }
        else
        {
            mx=max(mx,cnt);
            cnt=0;
        }
    }
    if(cnt>mx)
    {
        mx=cnt;
    }
    cout<<mx+1;
	return 0;
}

在这里再给大家另一种AC代码,思路和上面差不多,就不细讲了

#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main()
{
    int n,cnt=0,ans=0;
    cin >> n;
    for(int i=0;i<n;i++)
    {
        cin >> a[i];
        if(a[i]>a[i-1])
        {
            cnt++;
            if(cnt>ans)
            {
                ans=cnt;
            }
        }
        else
        {
            cnt=0;
        }
    }
    if(cnt==n)
    {
        cout<<cnt;
    }
    else if(cnt>ans)
    {
        cout<<cnt;
    }
    else
    {
        cout<<ans+1;
    }
	return 0;
}

第二道:P1597 语句解析

题目背景

木有背景……

题目描述

一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];未赋值的变量值为 0 输出 a,b,c 的值。

输入格式

一串符合语法的 PASCAL 语言,只有 a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 0。

输出格式

输出 a,b,c 最终的值。

输入输出样例

输入 #1

a:=3;b:=4;c:=5;

输出 #1

3 4 5

说明/提示

输入的 PASCAL 语言长度不超过 255。

首先,我们要知道PASCAL语言的变量赋值方式:

将b赋值给a(和c++有点像,只是多了一个:)
a:=b;
将a赋值为1
a:=1;

知道了这个之后,我们就可以开始做题了

思路:

首先定义一堆变量......然后while循环里面处理,具体请见代码(WA的,别抄)

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c;
    char d,e,f,g,h;
    while(cin >> d)
    {
        cin >> e >> f >> g >> h;
        if(g>='0'&&g<='9')
        {
            g-=48;
            if(d=='a')
            {
                a=g;
            }
            else if(d=='b')
            {
                b=g;
            }
            else if(d=='c')
            {
                c=g;
            }
        }
        else if(g=='a')
        {
            if(d=='a')
            {
                a=a;
            }
            else if(d=='b')
            {
                b=a;
            }
            else if(d=='c')
            {
                c=a;
            }
        }
        else if(g=='b')
        {
            if(d=='a')
            {
                a=b;
            }
            else if(d=='b')
            {
                b=b;
            }
            else if(d=='c')
            {
                c=b;
            }
        }
        else if(g=='c')
        {
            if(d=='a')
            {
                a=c;
            }
            else if(d=='b')
            {
                b=c;
            }
            else if(d=='c')
            {
                c=c;
            }
        }
    }
    cout<<a<<" "<<b<<" "<<c;
	return 0;
}

发现问题了吗?对,没错,abc没有赋值!

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a=0,b=0,c=0;
    char d,e,f,g,h;
    while(cin >> d)
    {
        cin >> e >> f >> g >> h;
        if(g>='0'&&g<='9')
        {
            g-=48;
            if(d=='a')
            {
                a=g;
            }
            else if(d=='b')
            {
                b=g;
            }
            else if(d=='c')
            {
                c=g;
            }
        }
        else if(g=='a')
        {
            if(d=='a')
            {
                a=a;
            }
            else if(d=='b')
            {
                b=a;
            }
            else if(d=='c')
            {
                c=a;
            }
        }
        else if(g=='b')
        {
            if(d=='a')
            {
                a=b;
            }
            else if(d=='b')
            {
                b=b;
            }
            else if(d=='c')
            {
                c=b;
            }
        }
        else if(g=='c')
        {
            if(d=='a')
            {
                a=c;
            }
            else if(d=='b')
            {
                b=c;
            }
            else if(d=='c')
            {
                c=c;
            }
        }
    }
    cout<<a<<" "<<b<<" "<<c;
	return 0;
}

  P1567AC记录  P1597AC记录

这篇博客就到这里啦,我们下篇博客见!

标签:语句,10,cnt,洛谷,int,题解,cin,mx,赋值
From: https://blog.csdn.net/woshishabi0716/article/details/140894791

相关文章

  • Java中跳转语句的学习
    跳转语句目录跳转语句break语句continue语句break语句break语句可用于上一节介绍的while、repeat-while和for循环结构,它的作用是强行退出循环体,不再执行循环体中剩余的语句。在循环体中使用break语句有两种方式:带有标签和不带标签。语法格式如下:break;//不带标签......
  • AGC064B 题解
    设红色的点值为0,蓝色为1。注意到,如果有一条边的颜色和两端点同色,一定可以选。例子:选择和两端点同色的边。又发现,如果存在一个\(sz>1\)的合法连通块,无论和其他点怎么连,原来的这个连通块内的点一定合法。有注意到形如\(0\xleftrightarrow10,1\xleftrightarrow01\)类......
  • P9351 题解
    P9351思路观察到一次覆盖操作相当于\((u,v)\)向\((u,v)\)为中心的一个矩形挖去四个角中每个点连代价为\(1\)的边。因为\(r\lec\),\(r\le\sqrt{rc}\)。暴力是01bfs,到每个点处理覆盖操作时枚举行一边,用\(n\)个并查集维护每行没有被删去的后继。对于每个点需要枚举\(......
  • 20240803题解
    话说T3都把式子推出来了结果忘记差分约束怎么写了。光线(light)题面:有\(n\)个玻璃板,第\(i\)个玻璃板的透光率为\(a_i\%\),反射率为\(b_i\%\),有大小为\(1\)个单位的一束光从第\(1\)个玻璃板开始,有多少光能穿透\(n\)层玻璃板。题解:考虑\(n=2\)时,可以简单算出两个玻璃板组合后的反......
  • 第三次测试题解
    问题F:求多个数的最大公约数multigcd[1*]:`#includeincludeincludeincludeusingnamespacestd;intfun(inta,intb){returnb==0?a:fun(b,a%b);}intmain(){intn;cin>>n;vectora(n+1,0);for(inti=1;i<=n;i++)scanf("%d",&a[i]);intans......
  • 镜面质数 题解
    题目id:20313题目描述如果一个质数镜像反转(即将该数各个位上数字反转)后仍然是质数,那么就称这个质数为镜像质数。例如质数\(13\)反转后为\(31\),则\(13\)为一个镜像质数。现在给定一个整数\(N\),请求出整数\(1\simN\)范围内有几个镜像质数。注意:求范围内的镜像质数时,质数和镜像反......
  • C++ 最小生成树 洛谷
    介绍:最小生成树是个啥?其实就像杨志一行人押送生辰纲。抛开最后生辰纲被抢的结局不谈,杨志他们需要到好几个地方,每个地方都需要花点过路费给梁山好汉们打点。比如下面就是一张城市地图:其中每两个图之间的路径长就是要给梁山好汉们打点的银子数。比如1号地点到2号地点的梁山好......
  • CF1946F Nobody is needed 题解
    Nobodyisneeded推销我的洛谷博客。题意多组数据。给定一个长度为\(n\)的排列\(a\),你需要回答\(q\)组询问,每组询问给出\(l,r\),求有多少个子序列\(t\)使得:\(l\leqslantt_1<t_2<\cdots<t_k\leqslantr\)。\(a_{t_i}|a_{t_{i+1}}(1\leqslanti<k)\)......
  • NSSCTF Web 题解 Write up
    NSSCTFWeb题解Writeup一、Do_you_know_http1、开题2、分析页面显示请使用“WLLM”浏览器,我没听说过“WLLM”浏览器,那首先去User-Agent修改访问的浏览器。用HackBar分析,将UA的值改成WLLM。用EXECUTE请求页面显示你只可以在本地正常阅读,并给出了ip。那简单,还是用HackB......
  • AGC013B 题解
    注意到只要随便dfs,如果没有可以走的点,说明这个端点满足要求。因为有两个端点,所以从同一个点开始搜两次,拼在一起就行了。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e5+5;vector<int>e[N];intn,m;boolvis[N];voiddfs(in......