排位1

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();
    }
}

  

posted @ 2024-02-03 13:38  伊芙加登  阅读(18)  评论(0)    收藏  举报