A.解开束缚丝(map写错了,直接存map然后搜索就可以)
#include<bits/stdc++.h>
#include<map>
using namespace std;
void solve()
{
int n;
cin>>n;
int a;
for(int i=0;i<n;i++)
{
map<char,int> mp;//map写成全局记得清!
cin>>a;
while(a--)
{
char c;
cin>>c;
mp[c]++;
}
int ans=0,tmp=0;
for(auto & [a,b]:mp)//遍历,a是字母,b是个数
{
if(b&1)tmp=1,ans+=b-1;
else ans+=b;
}
cout<<ans+tmp<<endl;
}
}
int main()
{
int t=1;
while(t--){
solve();
}
return 0;
}
B.7的意志(前缀和加二分)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int p[100005];
void solve(){
int n;
cin>>n;
vector<int>q(n+1);
for (int i = 1; i <=n ; ++i) {
cin>>q[i];
q[i]=q[i-1]+q[i];//前缀和
}
int ans=0;
for (int i = 1; i <=n ; ++i) {
int g=*lower_bound(q.begin(),q.end(),q[i-1]+7777);//lower_bound函数,二分查找第一个大于等于q[i-1]+7777的数
if(g-q[i-1]==7777)ans++;//一个一个区间遍历,如果有区间和等于7777就计数
}
cout<<ans<<endl;
}
signed main() {
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int t=1;
cin>>t;
while (t--){
solve();
}
}
D.p龙学长的教诲(主要注意末尾标点,然后按一定顺序输出)
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
vector<string>s;
string g;
char op;
while (cin>>g){
if(g.back()=='.'||g.back()=='!'||g.back()=='?'){
op=g.back();//存字符
g.pop_back();//去除字符
s.push_back(g);//剩余部分存进s
break;
}
s.push_back(g);
}
for (int l = 0,r=s.size()-1; l <=r ; ++l,r--) {
if(l==r){
cout<<s[l];
}
else{
cout<<s[l]<<' '<<s[r];
if(r-l>1)cout<<' ';
}
}
cout<<op;
cout<<endl;
}
signed main() {
int t=1;
cin>>t;
while (t--){
solve();
}
}