首页 > 其他分享 >Codeforces Round 962 (Div. 3)

Codeforces Round 962 (Div. 3)

时间:2024-08-27 17:03:31浏览次数:9  
标签:cnt const 962 int void Codeforces read ans Div

A. Legs

若只判断题,根据模4意义下分类即可。


B. Scale

模拟题,缩小同值矩阵即可。


C. Sort

对每个字母求前缀数量和,答案就是两端点的差。

const int N = 2e5 + 5;
int T, n, q; char a[N], b[N]; int c[N][26], d[N][26];

signed main(void) {
	for (read(T); T; T--) {
		read(n), read(q);
		readstr(a + 1); readstr(b + 1);
		for (int i = 1; i <= n; i++) {
			for (int j = 0; j < 26; j++) c[i][j] = c[i - 1][j], d[i][j] = d[i - 1][j];
			c[i][a[i] - 'a']++; d[i][b[i] - 'a']++;
		}
		
		for (int l, r; q; q--) {
			read(l), read(r); int ans = 0;
			for (int i = 0; i < 26; i++) {
				int cnt = (c[r][i] - c[l - 1][i]) - (d[r][i] - d[l - 1][i]);
				if (cnt > 0) ans += cnt;
			} writeln(ans);
		}
	}
//	fwrite(pf, 1, o1 - pf, stdout);
	return 0;
}

D. Fun

由两个不等式,在枚举 \(a\) 的时候可以限制 \(b\) 右端点,在确定两者的情况下可以直接算出 \(c = min((n - a * b) / (a + b), x - (a + b))\)

int T, n, x; ll ans;

signed main(void) {
	for (read(T); T; T--) {
		read(n), read(x); ans = 0;
		int m = min(n, x);
		for (int a = 1; a <= m; a++) {
			for (int b = 1; b * a < n && a + b < x; b++) {
				int c = min((n - a * b) / (a + b), x - (a + b));
				ans += c;
			}
		} writeln(ans);
	}
//	fwrite(pf, 1, o1 - pf, stdout);
	return 0;
}

E. Decode

如何有效地检查一个数组是否包含相同数量的 0 和 1?其实就是其中一个的数量是区间长度的一半,将这个式子移项并平移,可以得到类似计数端点相同值的等价表达。

const int N = 2e5 + 5;
const int mod = 1e9 + 7;
int T, n, b[N], ans, c[2 * N]; char a[N];

//inline void update(int pos, int val) {
//	for ( ; pos <= 2 * n; pos += lowbit(pos)) c[pos] = (c[pos] + val) % mod;
//}
//
//inline int query(int pos) {
//	int ret = 0;
//	for (; pos; pos -= lowbit(pos)) ret = (ret + c[pos]) % mod;
//	return ret;
//}

signed main(void) {
	for (read(T); T; T--) {
		readstr(a + 1); n = strlen(a + 1); ans = 0;
		c[n + 1] = 1;
		for (int i = 1; i <= n; i++) {
			b[i] = b[i - 1] + (a[i] == '1');
			int pos = 2 * b[i] - i + n + 1;
			int x = c[pos];
			ans = (ans + 1ll * x * (n - i + 1) % mod) % mod;
			while (ans < 0) ans += mod;
			c[pos] = (c[pos] + 1 + i) % mod;
		}
		for (int i = 0; i <= 2 * n + 1; i++) c[i] = 0;
		writeln(ans);
	}
//	fwrite(pf, 1, o1 - pf, stdout);
	return 0;
}

F. Bomb

由单调性考虑二分来求出 \(k\) 次操作是否能把所有数减到小于等于某个 \(x\), 再由这个边界去计算答案。

const int N = 2e5 + 5;
const int mod = 1e9 + 7;
#define int long long
int T, n, k, a[N], b[N];

inline bool check(int x) {
	int cnt = 0;
	for (int i = 1; i <= n; i++) if (a[i] >= x) {
		cnt += (a[i] - x) / b[i] + 1;
	}
	return cnt >= k;
}

inline ll calc(int x) {
	ll ret = 0; int cnt = 0;
	for (int i = 1; i <= n; i++) if (a[i] >= x) {
		int t = (a[i] - x) / b[i] + 1;
		cnt += t;
		ret += 1ll * t * a[i] - 1ll * t * (t - 1) / 2ll * b[i];
	}
	if (x > 0) ret += 1ll * (k - cnt) * x;
	return ret;
}

signed main(void) {
	for (read(T); T; T--) {
		read(n), read(k); int x = 0;
		for (int i = 1; i <= n; i++) read(a[i]), chkmax(x, a[i]);
		for (int i = 1; i <= n; i++) read(b[i]);
		int l = 1, r = x, ans = 0;
		while (l <= r) {
			int mid = l + r >> 1;
			if (check(mid)) ans = mid, l = mid + 1;
			else r = mid - 1;
		}
		writeln(calc(ans));
	}
//	fwrite(pf, 1, o1 - pf, stdout);
	return 0;
}

G. Penacony

两种做法:一个是常规的线段树扫描线,因为确定一种取法后,按顺序枚举删去的边,所有路径选法都确定了,再加上只要按顺序每条路径方向只变化两次,可以线段树维护区间加减和区间 \(0\) 的个数来做。另一种做法是 \(Xor-Hash\) ,我们发现,选择修改某一条路径的方向,就是翻转了全局对于这条路径的选择情况,容易想到差分异或。给每对点一个随机值,再求前缀。只要维护出现次数最多的数即可(将他们统统去除,维护他们的补集)。

mt19937_64 rnd((unsigned int)chrono::steady_clock::now().time_since_epoch().count());
const int N = 2e5 + 5;
int T, n, m, mx; ll a[N];

unordered_map <ll, int> h;

signed main(void) {
	for (read(T); T; T--) {
		read(n), read(m); h.clear(); mx = 0;
		for (int i = 1; i <= n; i++) a[i] = 0;
		while (m--) {
			int x, y; ll r = rnd();
			read(x), read(y);
			a[x] ^= r; a[y] ^= r;
		}
		for (int i = 1; i <= n; i++) a[i] ^= a[i - 1], h[a[i]]++;
		for (auto u : h) chkmax(mx, u.second);
		writeln(n - mx);
	}
	//fwrite(pf, 1, o1 - pf, stdout);
	return 0;
}

标签:cnt,const,962,int,void,Codeforces,read,ans,Div
From: https://www.cnblogs.com/EternalEpic/p/18383144

相关文章

  • Codeforces Round 968 (Div. 2)
    A.TurtleandGoodStrings题意:确定是否存在一种方案使得\(s=t_1+t_2+\cdots+t_m\),满足\(m>1\)且任意\(i<j\),\(t_i\)的第一个字母不等于\(t_j\)的最后一个字母。\(s_1\)和\(s_n\)一定不属于一个子串,因此\(s_1\nes_n\)是条件非法的必要条件。那么反......
  • Codeforces Round 968 (Div. 2)
    A.TurtleandGoodStrings思路:题意大致为把一个字符串分成若干段,要求每两段,前一段的首字符不能等于后的一段的尾字符,给你一个字符串,能不能构造出合法方案。观察到,分的段数越小,越有助于我们判断。所以,不妨分成两段,问题转化为判断首尾字符是否相等。代码:#include<bits/stdc++.......
  • [ARC182C] Sum of Number of Divisors of Product 题解
    题目链接点击打开链接题目解法我怎么不会分治/fn首先把\(x\)分解成\(\prodp_i^{x_i}(0\lei\le5)\)的形式,正因数个数为\(\prod(x_i+1)\)有一个很牛的想法是:合并两个\(x_i\)序列(假设一个叫\(x_0,...,x_5\),另一个叫\(y_0,...,y_5\))先不考虑后面的\(+1\)(可以最后......
  • Codeforces Round 968 (Div. 2)
    良心出题人给了中文题解!!!A.TurtleandGoodStrings长度为\(n\)的字符串至少分成两段,使\(\foralli<j\),第\(i\)段的首字符不等于第\(j\)段的尾字符第一个字符一定作为首字符,最后一个字符一定作为尾字符,只要判断这两个字符是否相等即可相等的话一定无解,不相等一定有......
  • EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2)
    Preface两个礼拜前打的比赛拖到现在才写博客,我只能说也是个神人了这场其实D2很快就想到做法了,但自己把自己给否了,后面不管了实现了一发交上去发现过了然后这天由于12点左右室友就关灯睡觉了,我写完D2后看了眼E没仔细想就睡觉去了,后面发现E其实很trivialA.Distance......
  • Codeforces Round #900 (Div. 3)
    三年之后第一次打比赛,用小号打了场\(Div.3\),居然没有AK,感觉实力退步到小学了。A.HowMuchDoesDaytonaCost?若只判断题,只要判断\(\{a_n\}\)中是否存在\(k\)即可。B.AleksaandStack构造方法不唯一,我直接输出奇数列,显然正确。C.VasilijeinCacak若只判断题......
  • Codeforces Round 967 (Div. 2) - C
    题意概述这是一个交互题。有一棵有\(n\)个节点的树,节点编号从\(1\)到\(n\),并要求你使用以下类型的查询来猜测它:"?ab"会告诉你哪个节点\(x\)在点\(a\)和\(b\)之间(\(|d(a,x)-d(b,x)|\)的值最小),其中\(d(x,y)\)是节点\(x\)和\(y\)之间的距离。如果存在不......
  • CodeForces - 1353D Constructing the Array
    CodeForces-1353D这道题也可能比较简单,主要是要想到优先队列要怎么使用,这一点如果用递归会写不了但是因为对优先队列不太熟悉,只有被提示可以用优先队列才想到要怎么用,还是很重要的STL注意运算符的重构应该反着来写其他的思维很朴素,运算符的重构就是,先比较长度,优先用长度长......
  • CodeForces-431C k-Tree
    感觉这个题的dp还是有点思维的,可能就是我现在能做到的题目的天花板级别的了,dp还是要点灵感感觉,以下是代码,可能要写题解要过好久,先水着include<bits/stdc++.h>defineintlonglongdefineendl'\n'usingnamespacestd;constintmod=1000000007;intn,k,d;intdp[200][2]=......
  • CodeForces - 1336A Linova and Kingdom
    CodeForces-1336A就差一点点,很可惜,少发现个很显而易见的结论就是一个点的价值,实际上就是(这个点的深度-之后的点的数目)就是\(depth_i-size_i\)然后只要用dfs维护就好了然后把一个点的价值用STL优先队列放在一起,贪心完成。但是可能也算不上什么贪心,因为是很朴素的东西......