ABC363

学贵坚持發表於2024-07-26

A

link

判斷即可。

點選檢視程式碼
#include<bits/stdc++.h>

using namespace std;

int r;

signed main(){
	
	cin >> r;
	if(r < 100) cout << 100-r;
	else if(r < 200) cout << 200-r;
	else if(r < 300) cout << 300-r;
	
	return 0;
	
} 

B

link

取最大的\(p\)個,判斷最小的那個要幾天才能完成。

點選檢視程式碼
#include<bits/stdc++.h>

using namespace std;

int n,t,p;
int l[105];

signed main(){
	
	cin >> n >> t >> p;
	for(int i = 1;i <= n;++ i) cin >> l[i];
	sort(l+1,l+1+n);
	int w = l[n-p+1];
	cout << max(0,t-w);
	
	return 0;
	
}

C

link

把每個字母有多少個記錄一下,搜尋,然後從\(1\)開始取\(k\)長度的子串,判斷是否迴文,不是迴文統計答案。

點選檢視程式碼
#include<bits/stdc++.h>

using namespace std;

int n,k;
char s[15];
char ans[15];
int vs[35];
int res;

void dfs(int x){
	//cout << x << endl;
	if(x > n){
		for(int i = 1;i+k-1 <= n;++ i){
			bool f = 0;
			for(int j = 1;j <= k;++ j){
				if(ans[i+j-1] != ans[i+k-j]){
					f = 1;
					break;
				}
			}
			if(!f) return;
		}
		res++;
		return;
	}
	for(char i = 'a';i <= 'z';++ i){
		if(!vs[i-'a']) continue;
		ans[x] = i;
		vs[i-'a']--;
		dfs(x+1);
		vs[i-'a']++;
	}
}

signed main(){
	
	cin >> n >> k >> s+1;
	
	for(int i = 1;i <= n;++ i)
		vs[s[i]-'a']++;
	
	dfs(1);
	
	cout << res;
	
	return 0;
	
}

相關文章