首页 > TAG信息列表 > 非零段
CCF 202109-2 非零段划分(C++)差分法
借用岛屿情况来分析这个题。考虑p足够大的情况,所有的数都被海水淹没了,只有 0 个岛屿。然后,海平面逐渐下降,岛屿数量出现变化。每当一个凸峰出现,岛屿数就会多一个;每当一个凹谷出现,原本相邻的两个岛屿就被这个凹谷连在一起了,岛屿数减少一个。使用数组cnt[],cnt[i] 表示海平面下降到iCSP20219——T2非零段划分
朴素思想肯定是遍历每个bar,确定在不同bar的影响下的非零段个数,但是暴力求解是O(MN)的 本题要求O(N),所以需要优化使对于每个bar的求解是O(1)的 可以用 c n t [CCF 202109-2 非零段划分(动态规划法,过了70%)
#include<stdio.h> int A[10001];/*使用动态规划法,开辟数组空间存放每处理完一个B后各种数p划分下的非零段个数,根据题意,p不超过10000*/ int flag[10001];/*flag用于记录非零段是否连续,全局变量初始时默认为零,所以省去了赋初值的步骤*/ int main(){ int n; scanf("%d",&n); inCSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版
CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版 一、题目: 二、Java70分答案 import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);非零段划分
非零段划分 非零段划分函数为代码中的find #include<stdio.h> #include<windows.h> int find(int b[],int n) { int i,start,end,sum=0; start=1,end=n; while(b[start]==0&&end!=start) /*去掉数组的首部0*/ start++; while(b[end]==0&&end!=start) /*去掉数组CSP 2021-09-2 非零段划分
先附上队友的题解,u1s1队友不会是因为给我讲题多了逻辑这么清晰了吧 因为本人较菜,看到这题就想起了亚特兰蒂斯? 说白了这题思路就是一个裸的扫描线,可以从上往下扫描根据峰值来更新区间个数(详见队友博客或队内dalao给我对拍的代码,咳咳 #include<iostream> #include<cstdio> #inCSP 2021-09-2 非零段划分 题解
CSP 2021-09-2 非零段划分 题解 题目链接题目分析思路优化1.针对遍历的优化2.针对原始数组的优化 源代码(100分) 题目链接 原题链接在非零段划分,我就不把题目贴出来了。题目大意就是给定一个数组,让你通过把数组中阈值以下的数变成0来将数组划分为尽可能多的连续的非零数段