• 洛谷 P5639 【CSGRound2】守序者的尊严


    洛谷 P5639 【CSGRound2】守序者的尊严

    洛谷传送门

    题目背景
    由于Y校最近进行了对学校食堂的全面改革与对小卖部的全面整治(乱搞),导致学校小卖部卖的零食被禁售了;学校食堂的炸鸡窗口也消失了;

    并且学校的学生处Q主任严禁学生点外卖,日夜监察。

    都说民以食为天,由于整天挨饿,全校同学处于水深火热之中。

    题目描述
    zhouwc的朋友(朋友就是自己系列)小Z由于饥饿难忍,不得不铤而走险点外卖。

    但是学校的Q主任为了能够抓住点外卖的学生布置了天罗地网——监控

    但是由于学校给Q主任的经费有限,所以这些监控不能持续工作,工作一秒之后便要暂停休息一秒,即开启一秒后关闭一秒再开启一秒...以此类推。

    还是由于Q主任的经费有限,这些监控被排成了一条直线,这条直线便在学生通往学生外卖驻点——二号门(没有门卫)的必经之路上。

    因为小Z修习了疾跑技能,所以小Z通过任意个数关闭的监控的时间均为1(即一次行动可以经过若干个未开的监控)。

    由于小Z想吃外卖又不想受到正在监控室看着监控的Q主任的处分,请你告诉他至少要多少时间才能安全到达外卖驻点。

    输入格式
    共2行

    第一行一个正整数n,表示在这条路上一共有n个监控

    第二行共有n个数。表示在第0秒是这些监控的开关情况,0表示监控关闭,1表示监控开启,并保证第一个监控一定是关闭的。

    输出格式
    共一行,表示小Z安全到达外卖驻点所需要的时间。

    输入输出样例
    输入 #1 复制
    6
    0 0 1 1 0 1
    输出 #1 复制
    4
    输入 #2 复制
    6
    0 0 0 0 0 0
    输出 #2 复制
    1
    说明/提示
    数据范围:
    对于10%10%的数据,1<=n<=101<=n<=10

    对于30%30%的数据,1<=n<=1001<=n<=100

    对于50%50%的数据,1<=n<=10001<=n<=1000

    对于70%70%的数据,1<=n<=1000001<=n<=100000

    对于100%100%的数据,1<=n<=10000001<=n<=1000000

    监控的开关情况均用0和1来表示。

    样例解释1:
    小Z在第一秒时冲到第二个监控处,用时1秒,总用时1秒。

    第二秒时,监控的开关状况变为了 1 1 0 0 1 0

    这时,小Z迅速从二号监控处冲到了四号监控处,用时1秒,总用时2秒。

    第三秒时,监控的开关状况变为了 0 0 1 1 0 1

    这时,小Z迅速从四号监控处冲到了五号监控处,用时1秒,总用时3秒。

    第三秒时,监控的开关状况变为了 1 1 0 0 1 0

    这时,小Z迅速从五号监控处冲出了监控区域,用时1秒,总用时4秒。

    样例解释2
    小Z在第一秒直接冲出了监控区域

    题解:

    这题真的是一眼切。代码难度入门,思路难度普及-。

    我们会发现,既然一秒钟可以穿过相当多的区域,而且每一秒的0,1状态是可以被取反的。所以最后就是要数一数0,1段有多少,也就是说,遍历整个串,如果当前的和上一个不一样,那么就加一,否则不变。因为一开始还会有一秒的状态,所以答案还要再加一。

    代码:

    #include<cstdio>
    using namespace std;
    const int maxn=1e6+10;
    int n,ans;
    int a[maxn];
    char *p1,*p2,buf[100000];
    #define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
    int read()
    {
    	int x=0,f=1;
    	char ch=nc();
    	while(ch<48){if(ch=='-')f=-1;ch=nc();}
    	while(ch>47)	x=(((x<<2)+x)<<1)+ch-48,ch=nc();
    	return x*f;
    }
    int main()
    {
    	n=read();
    	for(int i=1;i<=n;i++)
    	{
    		a[i]=read();
    		if(a[i]!=a[i-1])
    			ans++;
    	}
    	printf("%d",ans+1);
    	return 0;
    }
    
  • 相关阅读:
    Java中Runnable和Thread的区别
    Callable,Runnable比较及用法
    如何实现视差滚动效果的网页?
    【175】Easy CHM的使用
    【174】C#添加非默认字体
    【173】双显示器随便切换位置
    【172】outlook邮箱设置
    【171】IDL读取HDF文件
    怎样实现二级联动
    Java 23种设计模式详尽分析与实例解析之二--结构型模式
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11831542.html
Copyright © 2020-2023  润新知