2.蓝桥字符
求子序列出现次数,动态规划思想,
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
signed main()
{
cin>>s;
int sum1=0,sum2=0,sum3=0;
for(char ch:s)
{
if(ch=='l')
{
sum1++;
}
else if(ch=='a')
{
sum2+=sum1;
}
else if(ch=='n')
{
sum3+=sum2;
}
}
cout<<sum3<<endl;
return 0;
}
3.蓝桥大使
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
vector<pair<int,int>>nums;
bool cmp(const pair<int,int>&x,const pair<int,int>&y)
{
return (x.first-x.second)>(y.first-y.second);
}
signed main()
{
cin>>n;
for(int i=0; i<n; i++)
{
int a,b;
cin>>a>>b;
nums.push_back({a,b}); //贪心:局部最优 单个班级差值大优先
}
sort(nums.begin(),nums.end(),cmp);
int total=0,task1=n/2;
for(int i=0; i<n; i++)
{
if(i<task1)
{
total+=nums[i].first;
}
else
{
total+=nums[i].second;
}
}
cout<<total<<endl;
return 0;
}
4.拳头对决
理解清楚题目和样例意思
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a[100010],b[100010];
signed main()
{
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i]; //蓝队每次上场对已经上场红队所有比较
for(int i=1; i<=n; i++) cin>>b[i]; //红(顺序不可变)
sort(a+1,a+1+n);
int sum=0;
for(int i=1;i<=n;i++)
{
sum+=n-(upper_bound(a+i,a+1+n,b[i])-a)+1; //蓝队大于i的队员才可以遇到红队
}
cout<<sum<<endl;
return 0;
}