当前位置:网站首页>B - 刷墙 (C语言)
B - 刷墙 (C语言)
2022-06-11 03:38:00 【洛907】
一、题目
花椰妹去玩具店玩积木啦!
现在花椰妹的面前有一堵积木墙,宽度为 n 个格子,每个格子对应的高度为 ai 个格子。现在花椰妹要用 2×1 的积木来搭墙。
如果相邻两个格子的高度相同,花椰妹就可以将积木横着放,使得这两个格子的高度都加一。
当然花椰妹可以在任何情况下将积木竖着放,使得当前格子的高度加二。
现在给你 n 和所有的 ai ,请问花椰妹能不能将所有的格子的高度统一?
输入格式:
输入的第一行包含一个整数 n(2 ≤ n ≤ 2×105 )。 输入的第二行包括 n 个整数,为每个格子的初始高度 ai(2 ≤ ai ≤
109 )。
输出格式:
对于给定的积木墙,如果可以输出“YES”,否则输出“NO”。
Inputcopy:
5
2 1 1 2 5
Outputcopy:
YES
Inputcopy:
2
10 10
Outputcopy:
YES
Inputcopy:
3
1 2 3
Outputcopy:
NO
————————————————
二、解决方案
1.思路
①题目要求:
1、如果相邻两个格子的高度相同,花椰妹就可以将积木横着放,使得这两个格子的高度都加一。
2、在任何情况下将积木竖着放,使得当前格子的高度加二。
转换为数学语言(规则):
1、if a[i]=a[i+1] , 可以 a[i]++,a[i+1]++; (规则1)
2、a[i]+=2; (规则2)
规则分析:
1、由规则2知:对于任意的数进行+2运算,其奇偶性不变;
翻译:奇偶性相同的两个数,可以通过规则2使其相等
2、由规则1知:如果两个相邻的数相等,则他们可以同时加一
由分析1知,奇偶性相同的两个数,可以相等
翻译:如果两个数奇偶性相同,则可以同时改变两数奇偶性
② 样例分析:
1、2 1 1 2 5 偶 奇 奇 偶
2 2 2 2 5
3 3 3 3 5
5 5 5 5 5
两个偶数中间有两个奇数 √
2、10 10 偶 偶
两个偶数中间有零奇数 √
3、1 2 3 奇 偶 奇
3 2 3 / 1 4 3 / 1 2 5
两个奇数中间有一个偶数 ×
4、2 1 3
2 3 3
2 4 4
4 4 4
两个奇数中间有零个偶数 √
5、2 1 1 4 4 3
两个奇数中间有一个偶数
两个偶数中间有一个奇数 ×
6、2 1 1 2 5 7 9 2 2 11 2
如果你以偶数开头,第一对偶数满足条件,第3个偶数与第2个偶数直接有偶数个奇数,则可以
此时,以偶数开头是不满足条件的,
但是如果按照奇数开头,第一对偶数中间 有 偶数 个奇数,这偶数个奇数可以两两配对;
然后 第3个偶数与第2个偶数直接 有 偶数 个奇数,它也两两配对;
那就满足了条件。
③ 题目分析:
两个奇偶性相同的数之间,
如果有偶数个与之奇偶性不同的数,则可以;
反之,则不行;
④算法:(以偶数开头)
遇到奇数,跳过;遇到偶数,用一个flag来存放起点,
flag有一个初始值,如果是第一次遇到偶数,flag标记起点,
如果是第二次,则用len=终点-起点,然后判断len的奇偶性;
然后把flag置为初始值。
——————————————
2.代码
#include<stdio.h>
#define Max 200010
int n; // n 个格子
int i, j, k; // 遍历
int a[Max]; // 每个格子的高度
int check(int x);
int main()
{
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
if (check(1) || check(0))
printf("YES");
else
printf("NO");
return 0;
}
int check(int x)
{
int flag = 0;
// 以偶数开头
for (int j = 1; j <= n; j++)
{
// 遇到奇数
if (a[j] % 2 == x)
continue;
// 遇到偶数
else
{
// 起点
if (flag == 0)
{
flag = j;
}
// 终点
else
{
// 两个偶数中有 flag 个奇数
flag = j - 1 - flag;
// 如果有 奇数 个奇数
if (flag % 2 == 1)
return 0;
// 把flag置为初始值
flag = 0;
}
}
}
// 判断是否有始有终
return flag == 0;
}
边栏推荐
- jlink最新版本下载
- 从功能测试进阶自动化测试,熬夜7天整理出这一份3000字超全学习指南【附网盘资源】
- 【SignalR全套系列】之在.Net6中实SignalR通信
- Typera+picgo+ common configurations of Tencent cloud cos
- Matlab reports an error when trying to use * * * as a function problem, and tries to execute script PCA as a function:
- Skynet source code analysis make
- Shell script binary encryption
- 实现发布订阅模式-----手撕js系列
- Right click PowerShell here function add
- Parameter transfer format when the parameter of PostgreSQL function is a user-defined type
猜你喜欢

Matlab reports an error when trying to use * * * as a function problem, and tries to execute script PCA as a function:

Canvas+svg line particle animation web page background

pmm监控oracle

OpenGL Chapter 7 basic lighting

Detailed explanation of scenario method for common test case design methods

Lvgl Chinese font production

Build local source 2.0 for Galaxy Kirin server version

J. Balanced Tree

SQL query users logged in for three consecutive days

UML系列文章(28)体系结构建模---协作
随机推荐
Oppo K9 tests "bundling sales" and consumers "earn" or "lose"?
Lianyirong (passed)
基于SSM的大学生社团管理系统
Arm development board scheme and manufacturer analysis
什麼樣的人才是幸福的?
SSL library selection
Promise use
2_ Introduction to SPU related services
unforgettable moments
Writing shell scripts using vscode
大厂外包or自研公司?测试人找工作怎么选?
Unity's data persistence -- Jason
pmm监控oracle
Pthread in the multithreaded Trilogy
Simple image browsing with fragment
Student online education and teaching course management system based on SSM framework
/10个值得推荐的学习编程的网站 世界已经进入了互联网的时代。据最近发布的一篇《2016年互联网趋势》报告显示,中国已成为互联网市场的领导者,中国互联网用户的数量达到了6.68亿。可以预见,有
给孩子的国学经典
OpenGL Chapter 9 lighting map
The tide play power is really firepower! The first big screen cinema for young people? Cool open TV Max 86 "sudden attack