csust专题

CSUST OJ 你真的会吃零食吗?(猴子分桃)

Description 有nn个人分一堆零食,第一个人扔掉一包零食后刚好能均分成nn等份,然后他取走一份;第二个人再第一个人剩下零食的基础上做相同的操作,扔掉一包然后分成nn等份,然后取走一份;后面的人也这样做。 问最少有多少个零食可以支持nn个人这样分配。 每个人必须都有零食拿到手。 Input 输入一行一个整数n(2\le n\le 9)n(2≤n≤9). Output 一行一个整数

【CSUST 7041】: lazy tree 线段树

传送门 题意 分析 这题思路不是很难,难在细节的处理上 首先我们去维护区间的价值和区间和,区间的价值为两个子区间的价值和+两个子区间和的乘积 然后推出来区间+x对价值的改变公式即可 代码 #pragma GCC optimize(3)#include <bits/stdc++.h>#define debug(x) cout<<#x<<":"<<x<<endl;#define d

【CSUST 7041】: 修机器 DP

传送门 题意 分析 很容易写出状态转移方程 f [ j ] = m a x ( f [ j ] , f [ j − y ] + ( t − j ) ∗ x ) ; f[j] = max(f[j],f[j - y] + (t - j) * x); f[j]=max(f[j],f[j−y]+(t−j)∗x); 似乎是一个背包问题 但是需要考虑的是,背包是不用考虑顺序问题的,这里需要考虑一下

CSUST 2020国庆新生有奖赛题解

前言:先为20级萌新们惨遭学长学姐毒手感到不幸,其次希望这次没发挥好的萌新也不要气馁,后面好好学算法,肯定有机会的(毒瘤会长说的 )。 A题: zw吃外卖 (此处先殴打出题人) 题解: 签到题,奇数就输出YES,偶数就输出NO 代码: #include<cstdio>int main(){int n;scanf("%d",&n);if(n%2==1){printf("YES");}el

CSUST 2013 丢手绢 (线段树)

链接: 丢手绢 题意: n个数编号为 1 - n 围成一个环,给出 q 次操作,点修改,和查询 相距不超过k的两个数字之和的最大值和最小值。 思路: 注意数据范围 k 最大是 5 ,我们可以 o ( n )的求出每个长度为 k 的区间里的 最大值次大值,最小值次小值,也就可以得到答案,但是还有修改,因为每次修改,最多改变 k 个区间的最值,所以我们还是可以直接修改这个小区间的最值 ,但这还不是我