11 2023 档案

摘要:题目链接 A. int a[5]; void solve() { int ma=0; for(int i=1;i<=3;i++){ cin>>a[i]; a[i]=(a[i]+1)/2; ma=max(ma,a[i]); } int ans=0; for(int i=1;i<=3;i++){ if( 阅读全文
posted @ 2023-11-27 21:28 WW爆米花 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 解决题所花时间要小于总时间-路程时间 解题所花时间为5n(n+1)/2 void solve() { int n,k;cin>>n>>k; for(int i=1;i<=n;i++){ int a=5*i*(i+1); int b=480-2*k; if(a>b){ cout<<i- 阅读全文
posted @ 2023-11-26 16:55 WW爆米花 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题目链接 A, 当前数是奇数特判不是1后直接输出 若是偶数就一直除以2,直至成为一个奇数,特判不是1后输出 别想复杂别想复杂 void solve() { ll n;cin>>n; if(n&1){ cout<<"YES"<<endl;return ; } while(n%2==0){ n/=2; 阅读全文
posted @ 2023-11-26 16:47 WW爆米花 阅读(3) 评论(0) 推荐(0) 编辑
摘要:求逆序对 归并排序 首先是一个排序作用,然后可以求逆序对 平均时间复杂度:O(nlogn),空间复杂度:O(n) 代码: int n,ans=0; int a[N],temp[N]; void merge_pai(int l,int r,int mid){ int i=l,p=l,j=mid; wh 阅读全文
posted @ 2023-11-24 18:44 WW爆米花 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题目链接 最优情况是两两配对嘛,我们把它们排序,对半开去比较 即第一个与n/2去比,第2个与n/2+1去比... int a[N]; void solve() { int n,k;cin>>n>>k; for(int i=0;i<n;i++)cin>>a[i]; sort(a,a+n); int c 阅读全文
posted @ 2023-11-24 18:13 WW爆米花 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 先把菜肴按取出时间从前到后排序,因为先拿出先熟的一定最优 去枚举什么时候取出第i道菜,限制是时间是在前一道菜取出的时间之后,三层循环的dp 不错的状态转移 int f[2*210][2*210]; int a[210]; void solve() { memset(f,0x3f3f3 阅读全文
posted @ 2023-11-24 12:39 WW爆米花 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 拿例子说话 n1,那么在1处建信号站,信号为0 n2,那么在1和2处建信号站,信号均为0 n3,可以在1,2,3处建信号为0的信号站,也可以在2处建信号为1的信号站 n4,可以在1,2,3,4处建信号为0的信号站,也可以在2处建信号为1的信号站并在4处建信号为0的信号站,还可以在3处 阅读全文
posted @ 2023-11-24 11:52 WW爆米花 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 感觉跟欧拉没什么关系,属于带偏了 因为任两个点都有来回两条边,直接从最小点出发到每一个点就好了 难点在于取一段,题解代码值得学习 void solve() { ll n,l,r; cin>>n>>l>>r; ll fi=0,se=0; for(ll i=n-1;i>=1;i--){ 阅读全文
posted @ 2023-11-23 22:09 WW爆米花 阅读(2) 评论(0) 推荐(0) 编辑
摘要:A. 考虑按块来计算 如果这个块在两边,那么除了与这个块相邻的那一个数与这个块的数不同(一个块里的数都是一样的),其他位置上的数任选 若这个块在中间,那么与这个块相邻的左右两个数与这个块的数不同,其他位置上的数任选 块的大小从1-n,每个块可选数字为10种,相邻数可选数字为9种,其他位置可选10种 阅读全文
posted @ 2023-11-23 21:19 WW爆米花 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 首先,如果只有1个机关(除高度h)那么不需要水晶 试想,无论这个机关在哪里,当它关闭后,下一个机关就会开启...以此类推 反而机关多了情况会更复杂 设i和i-1机关都是打开的,我现在在机关i,然后i和i+1的机关会一起关闭,那么i+2一定要有一个开的机关,若没有,则需要水晶 int 阅读全文
posted @ 2023-11-23 20:37 WW爆米花 阅读(7) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 怪物先承受攻击,若承受住了,再回血,没承受住则死亡 也就是说若我们这一轮不能把它完全杀死,就要选择让它回血最少的攻击 若这一轮最大的攻击力能把它杀死则不用关心回血 若不能一招致死且回血大于攻击,那么怪物永远不会被杀死 void solve() { int n,x;cin>>n>>x; 阅读全文
posted @ 2023-11-13 20:13 WW爆米花 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 首先每个木板最多增加2个高度 设木板a,b,c,若a与b高度相同,那么我们让b高度+1,假设b现在又与c高度相同,那么我们让b的高度再+1 b只有两个相邻木板,所以b不用再改变了 所以当前木板可以有3个选择:不变,高度+1,高度+2 并要保证与前一块木板高度不同,那么我们枚举的时候把 阅读全文
posted @ 2023-11-13 19:36 WW爆米花 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目链接 dp 确实没想到这种递推方式,一直绕在把整个网格分成k块,又要满足颜色不同,实在解不出来 dp的设置状态不是没想过,像这样的设置的确超出我的水平了 现在详细讲讲 只有两行,若两行的颜色块状态已知,我们是可以判断什么情况联通块会+1,什么情况是不变的,我们进行枚举即可 f[i][j][typ 阅读全文
posted @ 2023-11-12 22:44 WW爆米花 阅读(6) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 把两个数合并成一个数,数的总和并没有变 要对应相等,那么两个数组所有数的总和一定相等,所以在最坏情况下两个数组都合并为1个数时一定满足条件 求最少合并次数的话,因为要对应下标对应相等,那么当前一定要通过合并一些数让当前对应下标相等,因为合并后面的对当前没有影响 所以直接用两个队列,取 阅读全文
posted @ 2023-11-12 21:48 WW爆米花 阅读(11) 评论(0) 推荐(0) 编辑
摘要:题目链接 C. 首先一列只能有一个黑格子,相邻列可以都有黑格子,只要第一列的第一个(第二个)是黑格子,第二列的第二个(第一个)是黑格子即可 黑格子可以在一列的上方或下方(两种情况) 要注意的是如果是相邻列都有黑格子,那么第一列黑格子的位置确定了那么所有相邻列的黑格子位置都确定了 如果不相邻,那么每一 阅读全文
posted @ 2023-11-12 20:49 WW爆米花 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目链接 I. 先算出一共有多少天,方便起见,算出考试总天数和发现总天数,两者相减即为差多少天 一周固定三天训练,用同样的方式计算出各有多少天训练,再相减即为答案 要注意的是,算当前周时,训练日期<本周星期的才算已经训练的天数 void solve() { int x0,x1,x2;cin>>x0> 阅读全文
posted @ 2023-11-07 23:06 WW爆米花 阅读(14) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 层取,因为它的高度只有2e5,我把每个高度的方格个数记录下来 最后从高到低跑一遍,大于k的ans++ 有几个点: 顺序无关紧要,所以先从小到大排个序 从右往左,若前一个与当前的高度相同就continue,直到高度不相同 有一个变量now,记录的是当前高度 把当前高度-1的方格个数就是 阅读全文
posted @ 2023-11-07 13:09 WW爆米花 阅读(5) 评论(0) 推荐(0) 编辑
摘要:题目链接 这个dp题还是想多说一点,感觉之前写的还是不够清晰和透彻 先提一嘴,感觉这个dp不同于一般的dp,不是从1递推到n,个人理解更像是桶,后面会有很神奇的转移,真的太巧妙了 先解决一些局部问题吧 首先来想想重复的情况 如:0,1,1 这个例子中1是重复的,我们的dp转移状态是dp[i][0]+ 阅读全文
posted @ 2023-11-05 23:21 WW爆米花 阅读(6) 评论(0) 推荐(0) 编辑
摘要:没时间了,只补了一个小题,自己尝试证明了下结论哈哈,还挺不错的 华中D 把线分成两种: 一种是只影响一个正方形的,就是最外围的那一圈,是偶数条 一种是影响两个正方形的(公共边),也是偶数条 已知偶数位是必胜态 后手只要跟着先手走, 先手选最外围的走,后手就选最外围的走, 先手选公共边走,后手就选公共 阅读全文
posted @ 2023-11-05 23:19 WW爆米花 阅读(7) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 自己写的时候固定思维左右转换,上下转换,还分开求了最短子序列,从一开始就错了... 正解: 因为操作可以变成4个方向的任意一个,相当于有几个字符就可以有几个任意的操作 二分区间长度,for循环滑动窗口枚举子序列 计算部分用前缀和维护求出最终的x,y 计算x,y和终点的xx,yy还差多 阅读全文
posted @ 2023-11-05 22:10 WW爆米花 阅读(6) 评论(0) 推荐(0) 编辑
摘要:补G题 一个大模拟 首先p不一定是质数,不能用逆元,用到了杨辉三角处理二次项系数 首先输入就很唬人,看题解学到用标记的方式分隔 系数默认为1,幂默认为1 有两个字符变量相同的情况,把系数合并 系数不为0才输出,系数为1不输出1,非1才有乘号,幂为1不输出 t次方就是杨辉三角的第t行,0-t就是从左到 阅读全文
posted @ 2023-11-03 22:13 WW爆米花 阅读(7) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 能全买,就让剩余的总钱/全买,加上可得的糖数,总钱-这些花费 此时不能全买,就遍历一遍,算出能买的总数 再让剩余的总钱/能买的... 这样是不会T的: 设total为这一轮能买的糖果的总价格,last为之前剩下的钱,now为这一轮买完糖果后剩下的钱 now=last%total,所以 阅读全文
posted @ 2023-11-03 15:01 WW爆米花 阅读(8) 评论(0) 推荐(1) 编辑
摘要:题目链接 A. 手玩,左右循环后对应位置字符相同,可得到: 如果只有两个字符一定可以 如果是奇数,那么必须全部相同 如果是偶数,那么奇数位置的要全部相同,偶数位置的要全部相同 卡的点是相对位置不变,可以删除任意位置,如何判奇数全部相同,偶数全部相同 后来看@zys111代码,因为只有两种字符(可相同 阅读全文
posted @ 2023-11-02 13:24 WW爆米花 阅读(10) 评论(0) 推荐(0) 编辑
摘要:题目链接 dp,自己写的时候没有考虑完全状态转移,其实是滑动窗口dp,需要维护一段区间的最小值 1-n内的数显然能一步得到, 考虑n+1到y,可由前面的状态加数得到也可以乘数得到, 考虑加,其实是区间长度为n的滑动窗口的最小值+1 考虑乘,若当前数i能整除mi,则dp[mi]+1 int a[N], 阅读全文
posted @ 2023-11-02 13:23 WW爆米花 阅读(6) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 模拟, 先遍历一遍,出现0,则i+x和i-x存在则必是0 再遍历一遍,出现1,判i+x和i-x位上若已经是1或还没被赋值则满足题意,否则失败退出 输出是当前位是1,则输出1,否则输出0.因为1的限制范围明确,其余都填0 void solve(){ string s;cin>>s; i 阅读全文
posted @ 2023-11-02 13:23 WW爆米花 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题目链接 N. 因为输入只有两个字母,结果最多只有两位数,可以直接写答案 void solve(){ char x,y;cin>>x>>y; int xx=x-'A',yy=y-'A'; int ans=xx+yy; if(ans<26)cout<<(char)('A'+ans); else { a 阅读全文
posted @ 2023-11-02 13:23 WW爆米花 阅读(6) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 感觉1和2非常神奇,可以得到非常神奇的结论, 自我猜想可能是因为首先它们的值很小,那么可以表示的范围非常大, 然后可以改变奇偶性,范围就更大了 这题的结论就是连续1的个数/3 先特判第一步是1一定有一个贡献 然后加上后面连续1的个数/3 void solve() { int n,an 阅读全文
posted @ 2023-11-02 13:23 WW爆米花 阅读(8) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 个数为1的数一定会产生贡献,记为x 个数为2的数一定不会产生贡献,直接全部放入集合a 个数>2的数可产生也可不产生贡献,记为y 分类讨论: x>0: x为偶数,那么a,b集合平分x,其他全部放入a集合(反正不会有贡献) x为奇数,需要多一个y放入b, x<0,全放入a集合 代码: i 阅读全文
posted @ 2023-11-02 13:22 WW爆米花 阅读(5) 评论(0) 推荐(0) 编辑
摘要:Codeforces Beta Round 73 (Div. 2 Only) B. 数据小,暴力一点的方式更好写, 自己写的优化一点的出现跑不出来的情况 优化是把所有当前字母的位置和S的位置算一个距离,取最小 确实预处理出最短距离进行映射会更好 int n,m,len,vis[27],ans; do 阅读全文
posted @ 2023-11-02 13:22 WW爆米花 阅读(15) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. 一个数组可以头尾两端取,求取到最小值和最大值所需最小步数 从两头分别取或者从左向右取完或从右向左取完,三种情况取最小的步数即可 void solve() { int n;cin>>n; int mi=150,id_mi,ma=-1,id_ma; for(int i=1,x;i<=n; 阅读全文
posted @ 2023-11-02 13:22 WW爆米花 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目链接 A. Minimum Ternary String 1可以和2交换,1可以和0交换,0不可以和2交换, 意味着1可以在任何位置,而0和2的相对位置不变 所以记录下1的个数,把0和2按原字符串顺序放进答案字符串中 遍历答案字符串,碰到第一个2时先把所有的放进去,再放当前的2,把剩下的全部加入 阅读全文
posted @ 2023-11-02 13:21 WW爆米花 阅读(4) 评论(0) 推荐(0) 编辑
摘要:Codeforces Beta Round 72 (Div. 2 Only) A. A射杀B的一半,B剩下的一半射杀A的一半,A剩下的一半再射杀B剩下的一半 2*n分成4份,3次射杀机会分别射杀一份 void solve() { int n;cin>>n; cout<<n*2-n/2; } 或者 v 阅读全文
posted @ 2023-11-02 13:21 WW爆米花 阅读(7) 评论(0) 推荐(0) 编辑