文章目录
- 1. 简写单词
- 2. dd爱框框
- 3. 除2!
1. 简写单词
【链接】:简写单词
解题思路:简单模拟题,主要是处理⼀下输⼊的问题。(也可以利用string类中的find函数,但时间复杂度会偏高)
#include <iostream>
#include <string>
using namespace std;int main()
{string s;while(cin >> s) // 返回值是istrem对象的引用(非0),读取结束或读取错误遇到EOF(0),结束{if(s[0] >= 'a' && s[0] <= 'z') cout << char(s[0]-32);else cout<<s[0];}return 0;
}
#include <iostream>
#include <string>
using namespace std;int main()
{string str,ret;getline(cin,str);ret += toupper(str[0]);int pos = str.find(' ');while(pos != string::npos){ret += toupper(str[pos+1]);pos = str.find(' ',pos+1);}cout<<ret<<endl;return 0;
}
2. dd爱框框
【链接】:dd爱框框
解题思路:滑动窗口,双指针算法(注意更新结果的时机)。
#include <iostream>using namespace std;const int N = 1e7 + 10;int a[N];int main()
{int n,x,sum = 0;cin >> n >> x;for(int i = 0;i < n;i++)cin >> a[i];int left = 0,right = 0,len = N;int l = -1,r = -1;while(right < n){sum += a[right++]; // 进窗口while(sum >= x) // 判断,进循环表示满足条件{if(len > right - left) // 更新结果{len = right - left;l = left + 1,r = right;}sum -= a[left++]; // 出窗口}}cout << l << " " << r <<endl;return 0;
}
3. 除2!
【链接】:除2!
解题思路:一眼贪心,利用堆来模拟一下贪心的过程即可。
#include <iostream>
#include <queue>using namespace std;int main()
{int n,k;cin >> n >> k;priority_queue<long long> pq;long long sum = 0;for(int i = 0;i < n;i++){int x;cin >> x;sum += x;if(x % 2 == 0) pq.push(x);}// 一定需要判段堆是否为空,如果当数组中的数都为奇数时,无法选数,不判断就会进循环,取堆顶元素就会报错while(pq.size() && k--){long long num = pq.top() / 2;pq.pop();sum -= num;if(num % 2 == 0) pq.push(num);}cout << sum << endl;return 0;
}