文章目录
- 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;
}