A - Leftrightarrow
水题,根据字符串长度构造字符串,然后直接对比即可
void solve(){
string s;cin>>s;
string b="<";
FOR(i,2,s.length()-1)b+='=';
b+='>';
cout<<ANS[s==b];
}
B - Integer Division Returns
水题,直接上ceill函数即可。注意cout的格式问题,可能会输出 $-0$ 这种东西,特判一下。
void solve(){
cout<<setprecision(0)<<fixed;
DCIN(n);if(n>-10&&n<0){cout<<0;return;}
cout<<ceill(n/10.0);
}
C - One Time Swap
问你交换一次可以产生多少种字符串。
典题,先让 $ans=\frac{n(n-1)}{2}$ ,然后检查每种字符有多少个,减去 $\frac{c(c-1)}{2}$ 就行,因为两个相同的字符交换时不会改变字符串本身(要注意,“字符串本身”也是一种情况,而不同的字符进行同字符对换都可以产生这一结果,所以要插个flag记录一下)
ll cnt[200];
void solve(){
string s;cin>>s;
for(auto &i:s)cnt[i]++;
ll n=s.length();
ll ans=(n-1)*n/2;
bool flag=1;
FOR(i,'a','z'){
if(cnt[i]<=1)continue;
ans-=cnt[i]*(cnt[i]-1)/2-flag;
flag=0;
}
cout<<ans;
}
E - Colorful Subsequence
给你n个有有权值的不同颜色的球,给你k次删除机会,使得相邻两球颜色不同。问你能不能做到,能就输出最大权值和,不能就输出 $-1$ 。
不能用贪心,因为没法由局部最优推出全局最优。
//先挖个坑,有时间填
附录
这里贴上头部定义和main函数部分:
#include<iostream>
#include<vector>
#include<bits\stdc++.h>
#define ll long long
#define ld long double
using namespace std;
#define ET '\n'
#define FOR(i,a,b) for(ll i=(a);i<=(b);i++)
#define rFOR(i,a,b) for(ll i=(a);i>=(b);i--)
#define CIN(a) ll a;cin>>a
#define DCIN(a) ld a;cin>>a
#define CA cout<<ans<<ET
#define CY cout<<"YES"<<ET
#define CN cout<<"NO"<<ET
//没有C++20就不能用ranges了
//#define PP(l,r,CK) *ranges::partition_point(ranges::iota_view((l),(r)+1),(CK))
string ANS[2]={"No\n","Yes\n"};
//solve函数代码
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//pre();
CIN(t);while(t--)
solve();
return 0;
}