首页 > 其他分享 >Codeforces Round 964 (Div. 4)

Codeforces Round 964 (Div. 4)

时间:2024-08-07 09:41:00浏览次数:20  
标签:964 y1 int Codeforces ++ lst x2 Div

Codeforces Round 964 (Div. 4)

A

计算数位和。

void solve() {
	int a = 0, n;
	cin >> n;
	while (n) a += n % 10, n /= 10;
	cout << a << '\n';
}

B

模拟,直接枚举 4 种出牌顺序,按题目给的规则判断即可。

bool chk(int x1, int y1, int x2, int y2) {
	int c1 = (x1 > y1) + (x2 > y2);
	int c2 = (x1 < y1) + (x2 < y2);
	return c1 > c2;
}

C

洗澡,数据给的很好,每个区间不重复,并且是按顺序的。只需要判断上一次结束到这一次开始之间的时间够不够 \(s\)。

void solve() {
	int n, s, m;
	cin >> n >> s >> m;
	bool res = false;
	int lst = 0;
	for (int i = 0 ; i < n; ++i) {
		int l, r;
		cin >> l >> r;
		if (l - lst >= s) res = true;
		lst = r;
	}
	if (m - lst >= s) res = true;
	cout << (res ? "YES" : "NO") << '\n';
}

D

给定 \(s\) 和 \(t\),\(s\) 中有 ?,判断是否能把 \(t\) 改成 \(s\) 的子序列。

这个子序列显然贪心,按顺序匹配 \(t\),遇到 ? 就直接改成可以匹配 \(t\) 的字母。

for (int i = 0; i < n; ++i) {
    if (j < m) {
        if (s[i] == t[j]) ++j;
        else if (s[i] == '?') s[i] = t[j++];
    } else {
        if (s[i] == '?') s[i] = 'a';
    }
}

E

贪心地,首先把最小的改成 \(0\),剩下的操作全都选择让某个数除以 \(3\),让 \(0\) 乘 \(3\)。

可以枚举需要除以 \(k\) 次 \(3\) 的区间,显然是 $\log $ 级别的,并且是 \([3^{k-1}, 3^k)\)。

int lst = 1, cnt = 1;
for (int x = 3; x <= 600000; x *= 3, ++cnt) {
    // [lst, x - 1]
    int c = min(x - 1, r) - max(lst, l) + 1;
    if (c > 0) ans += c * cnt;
    lst = x;
}

F

数数题,可拓展。中位数是 \(1\) 的时候才有意义,否则不会对答案产生影响。

考虑什么时候中位数是 \(1\):当且仅当选出的 \(0\) 的数量 \(c_0 \le \lfloor\frac{k}{2}\rfloor\),枚举这个 \(c_0\),然后用组合数算:

\[\sum_{c_0=0}^{\lfloor\frac{k}{2}\rfloor} \binom{C_0}{c_0}\binom{C_1}{k-c_0} \]

这里的 \(C_0\) 是序列中的 \(0\) 的数量,\(C_1\) 同理。

for (int c0 = 0; c0 <= x; ++c0) {
		ans += C(c[0], c0) * C(c[1], k - c0);
	}

G

显然是一个三分题,注意到 \(3^7=2187 > 999\),可以通过此题。

具体的,你询问 \(m_1, m_2\) 后,可以确定 \(x\le m_1\) 或 \(m_1<x\le m_2\) 或 \(m_2<x\),每次令区间缩减为原来的 \(\frac{2}{3}\) 最优。

实际上,应该有一个更优的做法叫做斐波那契三分法,不过这里应该没必要使用。可能不叫这个名字。。

原来是斐波那契查找,我记错了。这个的应用是在极限数据下减少保证二分次数最少。negiizhao 出的模拟赛中学来的。

标签:964,y1,int,Codeforces,++,lst,x2,Div
From: https://www.cnblogs.com/lingfunny/p/18346408

相关文章

  • Codeforces Round 963 (Div. 2)
    第一次上蓝名,指不准哪天掉下来就可以第二次蓝名了,好耶B.ParityandSum(CF1993B)首先特判原数组奇偶性相同的情况,奇偶不同时,由于替换过程只能产生奇数,故目标是将所有偶数变成奇数。假设当前选中奇数\(a_i\)和偶数\(a_j\),若\(a_i<a_j\),第一次操作时\(a_i:=a_j+a_i\),故最多......
  • CodeForces - 765F
    不妨套用P9058的套路,记点对\((i,j),a_i\gea_j\)被支配当且仅当存在\(i<k<j\),满足\(a_i\gea_k\gea_j\),同样,猜测对于\(i\),不被支配的点对\((k,i)\)只满足\(k<i\)最大且\(a_k>a_i\)。证明不妨使用反证法,记\(pre\),满足\(pre<j<i\)且\(a_{pre},a_j>a_i\),假设\((p......
  • Codeforces Round 963 (Div. 2)
    A.QuestionMarks题目大意有4n道题,每道题有4个选项,且正确答案中每个选项各占有n个。给定一个字符串s,s中ABCD分别代表4个选项,?代表放弃这道题,求可能的最大正确数解题思路统计每个选项的出现次数,假设每次选的都对,即ans+=min(x,n)点击查看代码#include<bits/stdc++.h>usi......
  • Codeforces Round 963 (Div. 2)
    CodeforcesRound963(Div.2)A对A,B,C,D的数量和\(n\)取个\(\min\)相加B只有奇数或只有偶数答案为\(0\),否则,只能把所有的偶数改为奇数,因为不可能把所有奇数改为偶数。然后就是改的大小问题了。考虑找到最大的奇数,然后把偶数从小到大依次修改。C显然对\(2k\)......
  • Educational Codeforces Round 168 (Rated for Div. 2)
    没有时间参赛直接补几道简单题吧~B.MakeThreeRegions题意:给一个2行的字符串,有block和其他东西,问把一个位置变成block让联通的部分变成3个部分,有多少种方法思路:找规律,找所哟符合条件的块即可voidsolve(){ intn; cin>>n; array<string,2>s; cin>>s[0]>>s[1];......
  • CodeForces-765F
    首先,如果你写过P9058的话,应该会想到支配点对这个trick,我们不妨将此题的套路搬到这套题上.定义点对\((i,j),a_i\lea_j\),当\((i,j)\)被支配当且仅当存在\(i<k<j\)满足\(a_i\lea_k\lea_j\)。相应的,一个有效的点对\((i,j)\),其中\(i\)满足\(i\)最大且\(a_i<a_j\)。......
  • Codeforces Round 963 (Div. 2) A - C 详细题解(思路加代码,C++,Python) -- 来自灰名
    比赛链接:Dashboard-CodeforcesRound963(Div.2)-Codeforces之后有实力了再试试后面的题目,现在要做那些题,起码要理解一个多小时题目A:链接:Problem-A-Codeforces题目大意理解:        极少数不考翻译能读懂的cf题目(bushi)每个测试用例第一行一个n,......
  • Codeforces Round 963 (Div. 2) D题解
    CodeforcesRound963D题目描述给定两个正整数n和k以及另一个由n个整数组成的数组a。在一次操作中,可以选择a中大小为k的任意一个子数组,然后将其从数组中删除,而不改变其他元素的顺序。更正式地说,假设(l,r)是对子数组a[l],a[l+1],...,a[r]的操作,使得r-l+1......
  • div中添加el-loading(局部loading的使用)
    div中添加el-loading(局部loading的使用)效果:在div中实现el-loadinghttps://img-blog.csdnimg.cn/c2870e74bd344b06ad1ccb0844b8e8ce.png<divclass="content-main">{{hotList}}</div>getHotList(columnType){this.$nextTic......
  • Codeforces Round 963 (Div. 2) 补题记录(A~D,F1)
    不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.A直接计算每一个选项最多对多少个题加起......