首页 > 其他分享 >2023年 8月15日普及组南外集训题解

2023年 8月15日普及组南外集训题解

时间:2023-08-18 22:11:55浏览次数:34  
标签:组南外 nums int 题解 tt stk 2023 include 翻转

A 陷阱

我们可以从 \(l\) 枚举到 \(d\),再计算是否满足要求,满足要求加入到数组中,输出第一个和最后一个

#include <iostream>
using namespace std;
const int N = 1e5 + 5;
int k;
int nums[N];
int main() {
    int l, d, x;
    cin >> l >> d >> x;
    for (int i = l; i <= d; i++) {
        int num = i;
        int sum = 0;
        while (num > 0) {
            sum += num % 10;
            num /= 10;
        }
        if (sum == x)
            nums[k++] = i;
    }
    cout << nums[0] << endl;
    cout << nums[k - 1];
    return 0;
}

B 翻转元素

我们可以使用动态规划来解决这个问题,\(f[i]\) 表示前 \(i\) 个数能达到的最大值,那么我们再加一维表示是否翻转
\(f[i][0]\) 表示没有翻转,如果前面一个数没有翻转,直接加 \(x\),如果翻转了加 \(-x\)
\(f[i][1]\) 表示翻转,如果前面一个数没有翻转,那么自己翻自己加 \(-x\),否则加 \(x\)
初始化:\(f[i][0]=x\) 没有翻转 \(f[i][1]=-x\) 翻转了
由于最少两个数翻转,那么最后的答案只能是不翻转的 \(f[n][0]\)

#include <iostream>
using namespace std;
#define int long long
const int N = 1e5 + 5;
int f[N][2];
signed main() {
    int n;
    cin >> n;
    int x;
    cin >> x;
    f[1][0] = x;
    f[1][1] = -x;
    for (int i = 2; i <= n; i++) {
        cin >> x;
        f[i][0] = max(f[i - 1][0] + x, f[i - 1][1] - x);
        f[i][1] = max(f[i - 1][0] - x, f[i - 1][1] + x);
    }
    cout << f[n][0];
    return 0;
}

C 移动棋子

我们可以发现,想让移动的步数最小,就要让空隙最小。我们干脆把所有空隙大的放一个棋子不去移动,然后只用一个棋子移动。
为了避免负数这种麻烦的情况,我们直接对原数组排序,然后用一个数组计算所有的空隙,从大到小排序,然后选出 \(n-1\) 个空隙最大的摆上棋子,其余的加起来就行了

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 5;
int x[N], nums[N];
int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; i++) cin >> x[i];
    sort(x + 1, x + m + 1);
    int res = 0;
    for (int i = 1; i < m; i++) {
        res += x[i + 1] - x[i];
        nums[i] = x[i + 1] - x[i];
    }
    sort(nums + 1, nums + m, greater<int>());
    for (int i = 1; i < n; i++) res -= nums[i];
    printf("%d", res);
    return 0;
}

D 插队

单调栈搞熟了再来更新

#include <iostream>
#include <vector>
using namespace std;
const int N = 1000005;
int stk[N], res[N], h[N];
int tt;
vector<int> vec[N];
int main() {
    int n;
    scanf("%lld", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%lld", &h[i]);
        while (tt && h[i] > h[stk[tt]]) tt--;
        vec[stk[tt]].push_back(i);
        stk[++tt] = i;
    }
    tt = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < vec[i].size(); j++) {
            int k = vec[i][j];
            while (tt && h[k] > h[stk[tt]]) tt--;
            res[k] = stk[tt];
        }
        stk[++tt] = i;
    }
    for (int i = 1; i <= n; i++) {
        int ans = res[i] + 1;
        printf("%lld\n", ans);
    }
    return 0;
}

E 小熊

标签:组南外,nums,int,题解,tt,stk,2023,include,翻转
From: https://www.cnblogs.com/xiaozhu0602/p/17641724.html

相关文章

  • CF1806E 题解
    题目大意给你一棵树,然后定义一个函数$f(x,y)$,接下来给你$q$组询问\(x_{i},y_{i}\),让你求每一次的$f(x_{i},y_{i})$。分析首先我们尝试根据这个函数的定义暴力求值,代码实现如下。llBFquery(intg,inth){if(!g)return0;return1ll*a[g]*a[h]+BFquery(p......
  • P4005题解
    闲来无事写篇题解题面传送门简要题意一条线段上有\(n\)个点成对连接,求所连的线最小交点数。思路看到题目中\(n\le44\)自然想到最终复杂度大约在\(O(2^\frac{n}{2})\)左右。经过思考不难发现不论如何两地铁站之间有且只有以下八种方式进行连接:显然可以暴搜解决,......
  • 20230818 CHAPTER 5 Thanks for the Memories arm64汇编内存使用
    .data段的内存引用实例十进制数不要以0开头,否则会被认为是8进制数一个数前面可以加-负号或者~取反符号; 申请一个内存块; 重复!转义字符!内存对齐  TheoffsetfromthePChas19bitsintheinstruction,whichgivesarangeof+/-1MB. Theoffsetaddress......
  • wsl2 下输出重定向至 clip.exe 出现中文乱码问题解决方案
    背景win10系统在wls2下安装neovim后希望与windows剪切板通信。按教程添加如下配置。--系统剪切板ifvim.fn.has('wsl')then vim.g.clipboard={ name='WslClipboard', copy={ ['+']='clip.exe', ['*']='clip.exe'......
  • 搭配买卖题解
    原题题目描述joe觉得云朵很美,决定去山上的商店买一些云朵。商店里有n多云,云朵被编号为1,2,……,n,并且每朵云都有一个价值。但商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这多云有搭配的云都要买。但是Joe的钱有限,所以他希望买的价值越多越好。输入第1行:n、m、w,表示......
  • 「BJWC2012」冻结题解
    「BJWC2012」冻结题解一.题目"我要成为魔法少女!""那么,以灵魂为代价,你希望得到什么?""我要将有关魔法和奇迹的一切,封印于卡片之中"在这个愿望被实现以后的世界里,人们享受着魔法卡片(SpellCard,又名符卡)带来的便捷。现在,不需要立下契约也可以使用魔法了!你还不来试一试?比如,我们在......
  • 2023.8.18A组模拟赛总结
    T1幂矩阵这题十分巧合。题目大意是有这样一个矩阵求该矩阵的逆矩阵中每项元素的平方和,手模几个点,会发现以下结论\[(P_n)^{-1}(i,j)=\begin{cases}i^m\binomij\quadi\geqj\\0\quadi<j\end{cases}\]不难发现我们的答案即是\[\sum_{i=1}^ni^{2m}\sum_{j=1}^i\bin......
  • 【学校文章】FAQ--Markdown(2023-08-18更新)
    FAQ--Markdown本文章的访问次数为次。Part1提示欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)本文已同步至学校网站、博客园。Part2背景本蒟蒻最近看了\(\operatorname{QOJ}\)中的FAQ,然后发现了一件很神奇的事:\(\operatornam......
  • [AGC004D] Teleporter 题解
    简单贪心。思路可以发现一号节点必然连向自己。由于题目中保证了最初每个点都可以到达一号节点。那么我们发现改完一后,原图变成了一棵十分优美的树。考虑在树上进行贪心。我们贪心的从叶子结点往上走。知道第\(k\)个若还没要到\(1\),就直接连向一号节点。这个贪心也比较......
  • 20230818比赛
    T1休息(rest)Description休息的时候,可以放松放松浑身的肌肉,打扫打扫卫生,感觉很舒服。在某一天,某LMZ开始整理他那书架。已知他的书有n本,从左到右按顺序排列。他想把书从矮到高排好序,而每一本书都有一个独一无二的高度Hi。他排序的方法是:每一次将所有的书划分为尽量少的连续部......