首页 > 其他分享 >Codeforces Round 921 (Div. 2)

Codeforces Round 921 (Div. 2)

时间:2024-01-28 12:11:45浏览次数:28  
标签:int Codeforces long cin -- solve 921 Div define

Codeforces Round 921 (Div. 2)

比赛地址

A. We Got Everything Covered!

思路

这个就是一个简单的拼接,这里很容易的发现我们最后最优的方法就是将所要拼写的字母按顺序拼接成n份就好了,但是这里需要主义一下简单的优化

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long


void solve() {
	int n,k;cin>>n>>k;
	string s="";
	for(int i=0;i<k;i++){
		s+=('a'+i);
	}
	// cout<<(s+s)<<endl;
	if(n==1){
		cout<<s<<endl;
		return ;
	}
	else{
		string s1="";

		int n1=n/2;
		for(int i=1;i<=n1;i++){
			s1+=s;
		}
		s1+=s1;
		if(n%2){
			s1+=s;

		}
		cout<<s1<<endl;
		
		return ;
		
	}
	
}

signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int t; cin >> t; while(t--)
	solve();
	return 0;
}

B. A Balanced Problemset?

思路

如何找到最优的分组,事实上我们只要找到距离n最近且比n大的x的因子就可以了,我们可以利用折半查找,因为一个因子是一对一对出现的

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long


void solve() {
	int x,n;
	cin>>x>>n;
	if(x%n==0){
		cout<<x/n<<endl;
		return ;
	}
	int res=0;
	int minn=0x3f3f3f3f;
	for(int i=1;i<=sqrt(x);i++){
		// cout<<x/i<<endl;
		
		if(x%i==0){
			// cout<<i<<" "<<x/i<<endl;
			
			if(i>n){
				if(minn>(i-n)){
					res=i;
					minn=i-n;
				}
			}
			if((x/i)>n){
				if(minn>(x/i-n)){
					res=x/i;
					minn=x/i-n;
					
				}
			}
		}
		// cout<<minn<<" ";
		
	}
	// cout<<res<<endl;
	
	// while(x%n!=0){
	// 	n+=1;
	// 	// cout<<n<<endl;
		
	// }
	// cout<<n<<endl;
	
	cout<<x/res<<endl;
	
	
}

signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int t; cin >> t; while(t--)
	solve();
	return 0;
}

C. Did We Get Everything Covered?

思路

这个就是A题的一个逆向思考,我们如何判断给定的字符串是不是合法的,就需要考虑能不能组成由n组k个字母的排列就可以了,如果>=n就是可以的,否则直接查找最后少哪些字母就可以

Code

#include <bits/stdc++.h>

#define ios cin.tie(nullptr)->sync_with_stdio(false)
#define endl '\n'
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, b, a) for (int i = (b); i >= (a); --i)
#define int long long
using namespace std;

void solve() {
    int n, k, m;
    string s;
    cin >> n >> k >> m >> s;
    set<char> st;
    int cnt = 0;
    string ans;
    rep(i, 0, m - 1) {
        st.insert(s[i]);
        if (ssize(st) == k) cnt++, ans += s[i], st.clear();
    }

    if (cnt >= n) cout << "YES" << endl;
    else {
        cout << "NO" << endl;
        rep(i, 0, k - 1) {
            if (st.find('a' + i)==st.end()) {
                ans += string(n - cnt, 'a' + i);
                cout << ans << endl;
                return;
            }
        }
    }
}

signed main() {
    ios;
    int T = 1;
    cin >> T;
    while (T--) solve();
    return 0;
}

标签:int,Codeforces,long,cin,--,solve,921,Div,define
From: https://www.cnblogs.com/du463/p/17992702

相关文章

  • CodeForces 1924C Fractal Origami
    洛谷传送门CF传送门对这种题一点办法都没有。。。可以手动折叠发现\(n=3\)时\(M=2+2\sqrt{2},V=2+4\sqrt{2}\)。于是大胆猜结论,第二次折叠开始,每次产生的山谷和山峰的长度相等。为什么呢?考虑从第二次折叠开始,设当前纸的层数为\(k\)(事实上若当前是第\(i\)......
  • CF Round 921 (Div. 2)
    linkA一种可行的方案是将前\(k\)个字母重复\(n\)次,对于每个要找的字符串,从\(n\)段中分别选取一个字符就可以得到。B如果\(x\)是答案的话,它一定满足\(x|n,\frac{x}{n}\leqm\),直接枚举答案,时间复杂度\(O(\sqrtn)\)。C沿着A的思路继续思考,如果能将\(s\)分成至......
  • CodeForces 1924B Space Harbour
    洛谷传送门CF传送门不知道为什么好像大家在这题上花了挺久的。发现对于一对相邻的港口\((x_i,x_{i+1})\),\(x\in(x_i,x_{i+1})\)的花费是\(y_i(x_{i+1}-x)\)。拆开得\(y_ix_{i+1}-y_ix\)。考虑用set维护所有港口,这样可以知道一个港口左边和右边的港......
  • CodeForces 1924D Balanced Subsequences
    洛谷传送门CF传送门发现去掉匹配的\(2k\)个括号后,剩下的串一定形如\())\ldots)((\ldots(\),其中右括号数量为\(a=m-k\),左括号数量为\(b=n-k\)。考虑把剩下的串像\())\ldots)\mid((\ldots(\)一样分成两半。枚举左半边加入了\(\frac{i}{2}\)对匹配,则......
  • div穿透事件(point-events)
    需求背景:需要通过穿透div对下层的div进行点击或者鼠标滑动事件1.上层div无事件执行,只需在上层元素的样式里添加:point-events:none 2.上层div的某个子元素里有事件执行,想穿透其他没有事件的子元素执行下层div的事件①给上层最外层元素添加:point-events:none②给有事件......
  • hey_left 18 Codeforces Round 920 (Div. 3)
    题目链接A.根据正方形4个角的特性,可以把它们排序处理,得到长和高,相乘得面积#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;boolcmp(pair<int,int>x,pair<int,int>y){if(x.first==y.first)returnx.second<y.second;e......
  • Codeforces Educational Round
    CodeforcesEducationalRoundEducationalCodeforcesRound160(RatedforDiv.2)(A-D)https://www.cnblogs.com/ComistryMo/articles/17920495.htmlEducationalCodeforcesRound161(RatedforDiv.2)(A-E)https://www.cnblogs.com/ComistryMo/articles/17983580......
  • Educational Codeforces Round 65 (Rated for Div. 2)C. News Distribution(模拟,计算的
    这道题目明显和出现4次的数和出现2次的数的个数有关系,只需要在每次更新之后维护这两个信息即可,我们在算出现2次的数的个数时其实会把出现4次的数的个数会把出现2次的数的个数+2,在判断时需要考虑这一点。也就是\(cnt2>=4\&\&cnt4>=1\)时才有解#include<bits/stdc++.h>#definer......
  • CodeForces 995F Cowmpany Cowmpensation
    洛谷传送门CF传送门考虑一个显然的树形dp,设\(f_{u,i}\)为\(u\)结点染颜色\(i\)的方案数,有\(f_{u,i}=\prod\limits_{v\inson_u}\sum\limits_{j=1}^if_{v,j}\)。前缀和后可得\(f_{u,i}=f_{u,i-1}+\prod\limits_{v\inson_u}f_{v,i}\)。发现\(f_......
  • Codeforces Round 912 (Div
    AHalloumiBoxes题目大意给定一个数组A,我们可以对数组惊醒多次操作,操作如下:我们可以将数组中的某一段倒置,但是长度不能超过K,例如:反转子数组意味着选择两个索引i和j(其中1<=i<=j<=n)并将数组\[a_1,a_2,…,a_n\]改为\[a_1,a_2,…,a_{i−1},a_{j},a_{j−1},…......