首页 > 其他分享 >[暴力题解系列]2023年蓝桥杯-整数删除(30分)

[暴力题解系列]2023年蓝桥杯-整数删除(30分)

时间:2024-03-24 17:34:41浏览次数:21  
标签:链表 暴力 int 题解 30 蓝桥 num include

这题暴力最多30分,但是30分也是分,做暴力的人不能贪心,拿到分就是赚了。

​ 这题核心烦人点在于他数据分层断崖,就只有前3个点能做到稳过。用的思路就是链表,但不是用指针存的,而是用数组下标为标记存的,只是我觉得因为这样好写一些。链表方便修改左右连接位置,所以越到后面就越能省下查询的时间

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

int n, k;
struct dat{
    int l, r;
    int num;
    bool valid;
}a[500050];
void modify(int i)
{
    a[a[i].l].num += a[i].num;
    if(a[i].r != -1)
        a[a[i].r].num += a[i].num;
    a[a[i].l].r = a[i].r;
    if(a[i].r !=-1)
        a[a[i].r].l = a[i].l;
    a[i].valid = false;
}
int findSmallest()
{
    int p, minn = 1e9, minp;
    for(int i=1; i<=n; i++)
        if(a[i].valid)
        {
            p = i;
            break;
        }
    minp = p;
    while(1)
    {
        //printf("%d ", a[p].num);
        if(a[p].num < minn)
        {
            minp = p;
            minn = a[p].num;
        }
        if(a[p].r == -1)
            break;
        else
            p = a[p].r;
    }
    return minp;
}

void dbgShowChain()
{
    int p;
    for(int i=1; i<=n; i++)
        if(a[i].valid)
        {
            p = i;
            break;
        }
    while(1)
    {
        printf("%d ", a[p].num);
        if(a[p].r == -1)
            break;
        else
            p = a[p].r;
    }
    printf("\n");
}
int main()
{
    scanf("%d%d", &n, &k);
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &a[i].num);
        a[i].l = i-1, a[i].r = i+1;
        a[i].valid = true;
    }
    a[n].r = -1;
    while(k--)
        modify(findSmallest());
    dbgShowChain();
    return 0;
}
/*
5 3
1 2 3 4 5

3 1
3 2 1
*/

标签:链表,暴力,int,题解,30,蓝桥,num,include
From: https://www.cnblogs.com/ComputerEngine/p/18092703

相关文章

  • 0318-0324题解
    成信大天梯赛L1-6二进制因为二进制是逢二进一,所以我们只要用cnt记录一下每一位上的数并给它加起来,然后cnt%2便是其和这一位上的数,注意要从右往左开始点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>pii;voidsolve(){stringa,b......
  • 广州大学第十八届ACM大学生程序设计竞赛(同步赛)——题解
    这套题我答的很失败。没有按照题目的难度去答题,前期浪费了不少时间。题目:A-字符画题解:思维、模拟。这道题我的通过率为62.5,没有过的原因是因为对细节的处理和把控不到位,对一些点忽视,我也记录了搜索的过程,但没有把搜索过的点消掉,而且没有找到最好的顺序去解答这道题,我是按照横的......
  • 字母迷宫题解
    思路:看到这题一眼跑广搜,但是转眼天堂之门,欸为什么要加2?好像没法广搜(不满足广搜特性),咋办?凉拌。该怎么让它满足广搜特性(先搜到的是最优的)。欸,我们是不是可以将队列换成优先队列让先搜到的最优。好像是的欸,优先队列启动!代码:#include<bits/stdc++.h>usingnamespacestd;inta......
  • cfEduRound163div2--D题解
    D-TandemRepeats?题意:做法:因为字符串长度较少,可以考虑枚举。or--动态规划voidsolve(){//D枚举//枚举!!!!!!!!!!stringstr;cin>>str;intn=str.size(),ans=0;for(inti=1;i<=n/2;i++){//枚举一半!!!intcnt=0;for(intj=0;......
  • 【算法双周赛】蓝桥杯【小白赛】
    坤星球【算法赛】问题描述坤星球是一颗十万光年之外的星球,相比于地球的时间流逝它的时间流逝更加缓慢,坤星球1年等于地球2.5年。现在问你,2024坤年等于地球多少年?注意:答案输出阿拉伯数字,不能为浮点数。输入格式本题为填空题,无需输入即可作答。输出格式输出一个数......
  • 题解 CF1948G【MST with Matching】
    非常精彩的转化!显然,树是二分图。由König定理,我们知道:二分图最小点覆盖等于最大匹配。因此枚举点覆盖\(S\),则一条边\((u,v)\)可以被选择,当且仅当\(u\inS\lorv\inS\),在所有可以选择的边上跑最小生成树即可。我采用的是Kruskal算法,时间复杂度为\(O(2^nn^2\logn)\),可......
  • 20240324每日一题题解
    20240324每日一题题解Problem给两个按照非递减顺序排列的整数数组num1和num2,另外有两个整数m和n,分别表示num1和num2中的元素数目。请合并num2到num1中,使得合并后的数组还是按照非递减顺序排列。注意,需要将合并之后的数组还是存储在数组num1中。示例1:输入:nums1=[1,2,3,0,......
  • 牛客周赛ROUND37--C题解
    C-红魔馆的馆主(495倍数)题意:做法:dfs搜索后面添加的数字。stringans="1000000000000000000";voiddfs(intcur,stringaddnum){//用数字写的话会无限dfs,因为addnum永远等于0。if(cur==0){if(addnum.size()<ans.size())ans=addnum;return;......
  • 最长子字符串的长度(二)【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-最长子字符串的长度(二)给你一个字符串s,字符串s首尾相连成一个环形,请你在环中找出’l’、‘o’、‘x’字符都恰好出现了偶数次最长子字符串的长度。输入描述:输入是一串小写的字母组成的字符串。输出描述:输出是一个整数补充说明:1<=s.length<=5x10^5......
  • 孙悟空吃蟠桃【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-孙悟空吃蟠桃孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有N颗桃树,每颗树上都有桃子,守卫将在H小时后回来。孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树,并从树上吃掉K个,如果树上的桃子少于K个,则全部吃掉,并且这一小时剩余的时间里不再......