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(); } }
标签:int,back,long,cin,solve,ans,排位 From: https://www.cnblogs.com/violet-hty/p/18004588