white Era 2021-05-28 17:25 采纳率: 0%
浏览 21

求大佬帮忙解决codeforces 中的Two sequences,为什么我这样过不了

题目链接

Problem - A - Codeforces

下面是我写的,只过了16个测试集。。。

#include<iostream>
#include<vector>
#include<cmath> 
using namespace std;

long long n;
long long nums[500050];
vector<long long> sub1;
vector<long long> sub2;
long long ans = -1;

void dfs(int t){
    if(t == n){
        long long temp1 = sub1.size();
        long long temp2 = sub2.size();
        //cout << temp1 << " " << temp2 << endl;
         if(sub1.size() + sub2.size() == n && abs(temp1-temp2) > ans){
            
            ans = abs(sub1.size()-sub2.size());
            
        }
    }else{
        if(sub1.size() == 0 || sub1[sub1.size()-1] < nums[t]){
            sub1.push_back(nums[t]);
            dfs(t+1);
            sub1.pop_back();
        } 
        if(sub2.size() == 0 || sub2[sub2.size()-1] < nums[t]){
            sub2.push_back(nums[t]);
            dfs(t+1);
            sub2.pop_back();
        }
    }
}

int main(){
    
    
    cin >> n;
    
    for(int i = 0;i<n;i++){
        cin >> nums[i];
    }
    
    dfs(0);
    cout << ans;
    return 0;

  • 写回答

1条回答 默认 最新

  • 微软技术分享 全栈领域优质创作者 2023-06-20 14:58
    关注

    您好,麻烦下次问问题的时候把题目一起粘过来,你给的网站我去过了,这里我先把题目放出来,然后再给你解答一下。

    img

    题目要求将给定的排列p分成两个不相交的递增子序列,使得这两个子序列的大小之间的差异最大。如果无法满足要求,则输出-1。

    你的代码我没看,这里为了简单,我直接用Python给你写一个参考案例吧,你自己可以对应的转为C语言。

    def max_difference(n, p):
        # 计算每个元素在排列中的位置
        positions = [0] * (n + 1)
        for i in range(n):
            positions[p[i]] = i
        
        # 定义两个变量记录两个子序列的最大值
        max_left = 0
        max_right = 0
        
        # 遍历排列,根据元素在排列中的位置更新最大值
        for i in range(n):
            if positions[p[i]] > max_left:
                max_left = positions[p[i]]
            else:
                max_right = positions[p[i]]
        
        # 判断是否能够将排列分成两个不相交的递增子序列
        if max_left == 0 or max_right == 0:
            return -1
        
        # 计算两个子序列的大小之间的差异
        difference = abs(max_right - max_left) + 1
        
        return difference
    
    # 输入排列的长度和排列本身
    n = int(input())
    p = list(map(int, input().split()))
    
    # 调用函数计算最大差异
    result = max_difference(n, p)
    
    # 输出结果
    print(result)
    
    评论

报告相同问题?

悬赏问题

  • ¥15 python变量和列表之间的相互影响
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)