T1:倒置字符串
链接:倒置字符串__牛客网
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
#include<iostream>
#include<vector>
using namespace std;
vector<string>ans,res;
string s1;
int main()
{
while(cin>>s1){
ans.push_back(s1);
}
int n=ans.size();
for(int i=n-1;i>=0;i--){
res.push_back(ans[i]);
}
for(auto x:res){
cout<<x<<" ";
}
return 0;
}
可以借助cin读入字符串的特点:读到空格就会停止。
将每个读入的字符串存入数组其中一个数组中,然后逆序到另一个数组中。
T2:排序子序列
牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2
非递增:递减或者相等 a[i-1]>=a[i-1]
非递减:递增或者相等 a[i-1]<=a[i-1]
#include<iostream>
#include<vector>
using namespace std;
int n;
int main()
{
cin>>n;
vector<int>a;
a.resize(n+1);
for(int i=0;i<n;i++){
cin>>a[i];
}
a[n]=0;
int idx=0;
int ans=0;
while(idx<n){
if(a[idx]<a[idx+1]){
while(idx<n&&a[idx]<=a[idx+1]){
idx++;
}
ans++;
idx++;
}
else if(a[idx]==a[idx+1]) idx++;
else {
while(idx<n&&a[idx]>=a[idx+1]){
idx++;
}
ans++;
idx++;
}
}
cout<<ans<<endl;
return 0;
}
因为每个数字都大于1,所以多开了一个位置a[n]=0,防止边界情况出现