Day 3
目录
- 1.简写单词(pass)
- 1.1 解析
- 1.2 代码
- 2.dd爱框框
- 2.1 解析
- 2.2 代码
- 3.除2!(pass)
- 3.1 解析
- 3.2 代码
1.简写单词(pass)
简写单词
1.1 解析
1.2 代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
if(s[0]>='a'&&s[0]<='z') cout<<(char)(s[0]-32);
else cout<<s[0];
}
return 0;
}
2.dd爱框框
dd爱框框
技能:前缀和二分双指针
2.1 解析
2.2 代码
#include<iostream>
#include <vector>
#include <limits.h>
using namespace std;
int main()
{
int n,x;
scanf("%d %d",&n,&x);
vector<int> arr(n+1);
for(int i=1;i<n+1;i++) cin>>arr[i];
int left=1,right=1;//数组下标从1开始
int sum=0,len=INT_MAX,leni=1;
while(right<n+1)
{
sum+=arr[right];//进窗口
while(sum>=x)//判断
{
if(right-left+1<len)//更新结果
len=right-left+1,leni=left;
sum-=arr[left++];//出窗口
}
right++;
}
cout<<leni<<' '<<leni+len-1;
return 0;
}
3.除2!(pass)
除2!
技能:排序、贪心、堆
3.1 解析
3.2 代码
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> heap;//创建大根堆
int n,k;
cin>>n>>k;
int x;
long long sum=0;
while(cin>>x)
{
if(x%2==0)//偶数,存入大根堆中
heap.push(x);
else sum+=x;
}
//进行k次操作
while(k--&&heap.size())
{
auto top=heap.top();
heap.pop();
top/=2;
if(top%2==0&&top) heap.push(top);
else sum+=top;
}
//计算和
while(heap.size())
{
auto top=heap.top();
heap.pop();
sum+=top;
}
cout<<sum;
return 0;
}