给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列

Given an array S of size N , check if it's possible to split sequence into two sequence

本文关键字:是否 两个 检查 拆分 一个 小为 数组      更新时间:2023-10-16

给定一个大小为N的数组S,检查是否可以将序列拆分为两个序列 -s1 to sisi + 1 to sN,使得第一个序列严格递减,第二个序列严格递增。
输入格式
第一行包含一个整数N表示输入的大小。
接下来N行包含一个整数,每个整数表示数组S的元素。

约束
0 < N < 1000,序列中的每个数字S> 0< 1000000000

输出格式
打印布尔输出 -"true""false"定义序列是否在增加 - 减少。

示例输入
5 1 2 3 4 5

示例输出
为 true

解释
仔细阅读条件以判断哪些序列都可能有效。不要使用数组或列表。
我的代码得分77.78/100分,我无法找出错误,任何人都可以帮助我。

#include<iostream>
using namespace std;
int main() {
int n;
long long int p,c;
cin >> n;
cin >> p;
bool dec=true;
int a=0;
if (n<=0 || n==1) {
a=1;
}
for (int i=1;i<n;i++) {
cin >> c;
if (p==c) {
a=1;
}
else if (p<c) {
if (dec) {
dec=false;
}
else {
dec=false;
a=0;
}
}
else if (c > p) {
if (dec) {
a=0;
}
else {
a=1;
dec=false;
}
}
}
if(a==0){
cout<<"true";
}
else {
cout<<"false";
}
return 0;
}

我在某些测试用例上测试了您的代码,似乎您的代码失败了,

n = 2
1 1

它的答案应该是 True,因为它可以分为 {1}、{1},并且由于单个元素都在增加和减少两者,因此答案是正确的。

这是我的代码 解释:我的整个概念是基于我们需要检查给定的序列是否可以在 2 个子序列中完全被破坏。所以我保留了一个变量Seq_no来跟踪,所以如果在代码的末尾,如果Seq_no值不应该超过 2,也因为序列有可能完全严格减少,所以在这种情况下,如果 n 不等于 1,那么答案是正确的。

#include <iostream>
#include <limits.h>
using namespace std;

int main() 
{
int n, curr, prev = INT_MAX, Seq_no = 1;
int i;
cin >> n;
for(i = 0; i < n; i++)
{
cin >> curr;
if(Seq_no == 1) // for stricly decreasing
{
if(prev <= curr)
{
Seq_no++;
}
}
else  // for stricly decreasing
{
if(prev >= curr)
{
Seq_no++;
break;
}
}
prev = curr;
}
if(Seq_no == 2 || (Seq_no == 1 && n != 1)) 
cout << "truen";
else 
cout << "falsen";
return 0;
}

如果我解决了您的问题,那么请接受答案。

相关文章: