目录
A. String Building
题目链接:
题面:
??题意:
思路:
代码:
B. Consecutive Points Segment?
题面:
?题意:
思路:
代码:
C. Dolce Vita
题目链接:
题面:
?题意:
思路:
代码:
A. String Building
题目链接:
Problem - A - Codeforces
题面:
?题意:
给定一个字符串,问能否由aa,aaa,bb或者bbb拼接而成
思路:
如果只有一个a,或者一个b,就无法拼接出来
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--){
string s;
cin >> s;
int ans = 1;
char c = s[0];
bool f = 0;
for(int i = 1; i < s.length(); i++){
if(s[i] != c){
if(ans == 1){
f = 1;
break;
}
ans = 1;
c = s[i];
}else{
ans++;
}
}
if(ans == 1){
f = 1;
}
if(f){
cout << "NO" << endl;
}else{
cout << "YES" << endl;
}
}
return 0;
}
B. Consecutive Points Segment?
题面:
?题意:
有一个横向的坐标轴,上面有n个地方有东西,现在可以选择一个东西,将他移动到-1,+1位置(只能操作一次),问能否把这些东西放在连续的位置上
思路:
前面的东西优选+1, 后面的东西优选-1,那么就相当于把n个东西,放在最后一个位置 - 第一位置 - 1的格子数里面,如果>=就是可以,否则就不可以
代码:
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
int arr[200005];
int main(){
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--){
int n;
cin >> n;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
int ans = arr[n - 1] - arr[0] - 1;
if(ans > n){
cout << "NO" << endl;
}else{
cout << "YES" << endl;
}
}
return 0;
}
C. Dolce Vita
题目链接:
Problem - C - Codeforces
题面:
?题意:
?有n家店铺,每个店铺卖糖果有不同的价格,现在我每天都有x元,每往后一天糖果的价格上升1元,现在问到一块糖果都不能买的时候,一共能买多少块糖果
思路:
贪心,糖果价格从小到大排序,然后求出前i个糖果的总和,枚举一次能买不同糖果,然后求出只能买这么多块的天数,累加即可
代码:
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define ll long long
int arr[200005];
ll sum[200005];
int main(){
int t;
cin >> t;
while(t--){
int n, x;
cin >> n >> x;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
sort(arr, arr + n);
sum[0] = arr[0];
for(int i = 1; i < n; i++){
sum[i] = sum[i - 1] + arr[i];
}
int a = 0; //天数
ll num = 0;
for(int i = n - 1; i >= 0; i --){ //只能买这么多块糖果的时候
ll ans = sum[i] + a * (i + 1); //最少需要花的钱
if(x >= ans){
num += ((x - ans) / (i + 1) + 1) * (i + 1);
a += (x - ans) / (i + 1) + 1; //买不了这么多糖果的时候
}
}
cout << num << endl;
}
return 0;
}
|