首页 > 其他分享 >AtCoder Beginner Contest 346

AtCoder Beginner Contest 346

时间:2024-03-23 23:47:02浏览次数:18  
标签:二分 AtCoder return Beginner int 代码 mid 346 ll

AtCoder Beginner Contest 346

最刺激的一集。

尝试挑战手速极限,用了 57s 做 A。但是好像还是很慢。

然后做 B,仍然想挑战手速。结果一眼出思路只要把 wbwbwwbwbwbw 多重复几遍就可以代替「无限长」。

很快就写完了。然后交了三发罚时。后来发现我复制若干遍 wbwbwwbwbwbw 的时候好像复制错了/ll /ll

过 B 之前很快过掉了 C, D。其中 D 有一发罚时是因为 DP 的边界错了。

过了 A~D 后看 E。感觉没什么思路。但是想到了如果这一行/列被覆盖了多次,那么只有最后一次覆盖是有效的。

于是想先实现这个过程。发现如果要这么做,必然需要将所有操作倒序处理。于是就莫名奇妙地联想到了白雪皑皑,发现倒序处理是正确的。延续着涂色的思路打出了正解。

此时是 43min。还有一个小时。

看 F 题。发现太典了。题目中字字句句都在提示二分,而二分的 check 又是一个入门贪心。想了一两分钟就开始写了。

越写越觉得 check 太过麻烦,但是还是硬着头皮写下来了份 140+ 的代码。没有调试,发现比答案少一。加上一后直接交了。结果 AC15 WA35。简单修改变成了 AC26 WA24。

然后发现加一绝对是错误的。去掉后开始疯狂调试 + 补充代码。赛时我的代码中写了若干个二分,没有把二分封装成函数,结果赛后发现每个二分都写错了。除此之外小错误和恶心边界比比皆是,写着写着就有些崩溃了。

于是硬生生地冲着 CP Editor 写了一个小时。比赛结束。

这份代码已经丑陋到 170+ 了。想了想还是重构代码吧。赛后一小时终于过了。

这里列几个犯的错误:

int getp(int l, int r, int k, int w) {		// [l, r] 中第一个 p 使得 [l, p] 中 w 出现 k 次
    int pos = -1, L = l;		// 要把最开始的 l 记录下来
	while (l <= r) {
        int mid = l + r >> 1, S = calc(L/*这里不能用 l,需要用最开始的 L*/ , mid, w);
        // if (S == k) return mid;	是错误的。
		if (S >= k) pos = mid, r = mid - 1;
		else l = mid + 1;
    }
	return pos;
}

bool chk(ll k) {
	pair<ll, int> cur = {1, 0};
	for (int i = 1; i <= lb; ++ i ) {
		cur = nxt(cur.first, cur.second, b[i] - 'a', k);
		if (cur.first > n) return false;// 如果不写这行,在最后写 return cur.first <= n,那么 cur.first 会超出 long long 的范围
	}
	return true;
}

标签:二分,AtCoder,return,Beginner,int,代码,mid,346,ll
From: https://www.cnblogs.com/2huk/p/18091925

相关文章

  • AtCoder Beginner Contest 346
    A-AdjacentProduct(abc346A)题目大意给定\(n\)个数,依次输出相邻俩数的乘积。解题思路按照题意模拟即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(false);cin.tie(0);c......
  • ABC346
    D枚举是哪一位相同,情况为\(00\)还是\(11\),然后用前缀和和后缀和求一下即可。\(pre_{j,i}\)表示第一位为\(j\),前\(i\)位的每两个相同的字符均不相同的情况,\(suf\)同理。codeE从后往前考虑。每一种颜色能染上这一行/列没有被染色的格子数,所以记录一下每一行,每一列......
  • Atcoder ABC242H Random Painting
    对于这个\(\max\)似乎没有什么好的办法,考虑\(\min-\max\)反演。记\(t_i\)为第\(i\)格被染黑的时间,有\(E(\max(t_i))=\sum\limits_{S}(-1)^{|S|+1}E(\min(t_i))(i\inS)\)。考虑如果知道了\(S\),那么就可以知道\(c=\sum\limits_{i=1}^m[[l_j,r_j]\capS\no......
  • Atcoder ARC132E Paw
    考虑最后往左走往右走的覆盖情况。能发现肯定是有两个洞之间,或者是第一个洞左边,最后一个洞右边没有被覆盖,而左边的都被覆盖为向左,右边的都被覆盖为向右。大致证明就是考虑左边这一部分,如果有向右的,那么其右边的洞肯定都需要走过才行,不然会被覆盖,那么这样就可以一次性走出左边,就......
  • Atcoder ARC140D One to One
    考虑到对于\(n\)个点的连通块,那就有\(n\)条边,就是个基环树。如果这里面有\(1\)个\(-1\),那么就是\(n-1\)条边,就是一棵树。如果有\(2\)个\(-1\),\(n-2\)条边一定不连通,不可能出现。令\(-1\)的个数为\(c\)。那么先对于已知的边连上,如果一个连通块是基环树就直......
  • AtCoder Beginner Contest 345
    A-Leftrightarrow(abc345A)题目大意给定一个字符串,问是不是形如<======...====>的字符串。解题思路根据长度构造出期望的字符串,再判断是否相等即可。神奇的代码s=input()print("Yes"ifs=="<"+"="*(len(s)-2)+">"else"No")B-Inte......
  • 【机器学习入门 Machine Learning For Beginners】逻辑斯蒂回归和分类
    系列文章目录第1章专家系统第2章决策树第3章神经元和感知机识别手写数字——感知机第4章线性回归文章目录系列文章目录前言一、分类问题的数学形式二、最大似然估计三、交叉熵损失函数四、多类别分类多类别逻辑斯蒂回归归一化指数函数交叉熵误差和均方误差的......
  • AtCoder Beginner Contest 345
    A-Leftrightarrow#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingldb=longdouble;#defineintlonglongusingvi=vector<int>;usingpii=pair<int,int>;constintmod=1e9+7;......
  • AtCoder Beginner Contest 345 A-F 题解
    A-LeftrightarrowQuestion给你一个由<、=和>组成的字符串\(S\)。请判断\(S\)是否是双向箭头字符串。字符串\(S\)是双向箭头字符串,当且仅当存在一个正整数\(k\),使得\(S\)是一个<、\(k\)个=和一个>的连接,且顺序如此,长度为\((k+2)\)。Solution按照题意......
  • Atcoder ARC165D Xor Sum 5
    考虑到这个最终的答案是\(\oplus\),所以只需要考虑每种排列出现的次数的奇偶,如果为奇再计算贡献即可。考虑什么情况下出现次数为奇。令每个数出现的个数为\(c_{1\simn}\),方案数即为\(\dbinom{k}{c_1,c_2,\cdots,c_n}=\prod_{i=1}^n\dbinom{k-\sum\limits_{j=1}^{......