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;
}