Problem C. Cyber Language
题意:
给定小写的中文拼音,输出大写的首字母。
题解:
将第一个字母和空格后的字母大写输出就可以了。
代码:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string s;
void solve(){
getline(cin, s);
cout << (char)(s[0] - 'a' + 'A');
int len = s.length();
bool flag = false;
for(int i = 0; i < len; i++){
if(s[i] == ' '){
flag = true;
continue;
}
if(flag){
cout << (char)(s[i] - 'a' + 'A');
flag = false;
}
}
cout << '\n';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
getline(cin, s);
while(t--){
solve();
}
}
Problem I. Package Delivery
题意;
有n个快递,给定到货日期和截止日期,每次最多拿k个,问最少需要几次拿完。
题解:
贪心。
首先按到货日期为第一要素排序,然后按照截止日期从早到晚依次看。我们设置一个缓冲地带,对于一个截止日期,我们首先看缓冲地带是否有截止日期早于当先考虑的截止日期,有则拿;然后考虑快递站里的包裹是否有到货日期早于该截止日期的,有则考虑它的截止日期,如果早于当前考虑的截止日期,则拿,否则放入缓冲区;最后再检查缓冲区,因为要尽可能拿满k个。
代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n, k;
struct pak{
int l, r;
bool operator < (const pak a) const{
return r > a.r;
}
}p[N];
bool cmp(pak a, pak b){
return a.l < b.l;
}
void solve(){
cin >> n >> k;
set<int> s;
for(int i = 1; i <= n; i++){
cin >> p[i].l >> p[i].r;
s.insert(p[i].r);
}
sort(p + 1, p + 1 + n, cmp);
priority_queue<pak> q;
int cnt = 0, ans = 0, now = 1;
auto i = s.begin();
while(i != s.end()){
int it = *i;
while(!q.empty() && q.top().r <= it && cnt < k){
q.pop();
cnt ++;
}
while(now <= n && p[now].l < it && cnt < k){
if(p[now].r <= it) cnt ++;
else q.push(p[now]);
now ++;
}
while(cnt && !q.empty() && cnt < k){
cnt ++;
q.pop();
}
if(cnt) cnt = 0, ans ++;
else i ++;
}
cout << ans << '\n';
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while(t--){
solve();
}
}
Problem K. Taxi
题意:
二维坐标n个点,每个点有一个费用w,q次查询,每次给定一个坐标,社曼哈顿距离为d,问给定点到n个点中min(d, w)的最大值。
题解:
如果没有 w 的限制,那么是经典问题。根据 |x| = max(x, −x),有
max {|x′

本文探讨了四个编程挑战:拼音转大写、快递调度、曼哈顿距离计算与排列组合,展示了如何运用贪心、动态规划等算法技巧解决实际问题。
最低0.47元/天 解锁文章
2173

被折叠的 条评论
为什么被折叠?



