Acwing第 30 场周赛完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing第 30 场周赛完结相关的知识,希望对你有一定的参考价值。

4197. 吃苹果【签到】


https://www.acwing.com/problem/content/4200/

#include<bits/stdc++.h>
using namespace std;
int n,h,x,ans;
int main(void)

    cin>>n>>h;
    for(int i=0;i<n;i++)
    
        cin>>x;
        if(x>h) ans++;
        ans++;
    
    cout<<ans;
    return 0;

4198. 最长合法括号子串【栈 / 模拟】


https://www.acwing.com/problem/content/4201/
这里的栈是直接存下标,便于计算长度。

#include<bits/stdc++.h>
using namespace std;
int maxv,cnt=1;
stack<int>st;
int main(void)

    string s; cin>>s;
    for(int i=0;i<s.size();i++)
    
        if(st.size()&&s[st.top()]=='('&&s[i]==')') st.pop();
        else st.push(i);
        
        int r;
        if(st.size()) r=i-st.top();
        else r=i+1;
        
        if(r>maxv) maxv=r,cnt=1;
        else if(r&&r==maxv) cnt++;
    
    cout<<maxv<<" "<<cnt;
    return 0;

4199. 公约数【分解约数 二分】


https://www.acwing.com/problem/content/4202/

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
unordered_map<LL,int>mp;
void solve(LL x)

    for(int i=1;i<=x/i;i++)
    
        if(x%i==0)
        
            mp[i]++;
            if(i==x/i) continue;
            mp[x/i]++;
        
    

int main(void)

    LL a,b; cin>>a>>b;
    solve(a),solve(b);
    vector<int>ve;
    for(auto i=mp.begin();i!=mp.end();i++) 
        if(i->second>=2) ve.push_back(i->first);
    sort(ve.begin(),ve.end());
    int q; cin>>q;
    while(q--)
    
        int l,r; cin>>l>>r;
        int L=lower_bound(ve.begin(),ve.end(),l)-ve.begin();
        int R=upper_bound(ve.begin(),ve.end(),r)-ve.begin();
        if(L>=R) puts("-1");
        else cout<<ve[R-1]<<endl;
    
    return 0;

其实,知道分解a和b的最大公约数即可

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
unordered_map<LL,int>mp;
LL gcd(LL a,LL b)return b?gcd(b,a%b):a;
void solve(LL x)

    for(int i=1;i<=x/i;i++)
    
        if(x%i==0)
        
            mp[i]++;
            if(i==x/i) continue;
            mp[x/i]++;
        
    

int main(void)

    LL a,b; cin>>a>>b;
    solve(gcd(a,b));
    vector<int>ve;
    for(auto i=mp.begin();i!=mp.end();i++)  ve.push_back(i->first);
    sort(ve.begin(),ve.end());
    int q; cin>>q;
    while(q--)
    
        int l,r; cin>>l>>r;
        int L=lower_bound(ve.begin(),ve.end(),l)-ve.begin();
        int R=upper_bound(ve.begin(),ve.end(),r)-ve.begin();
        if(L>=R) puts("-1");
        else cout<<ve[R-1]<<endl;
    
    return 0;

手写二分

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
unordered_map<LL,int>mp;
LL gcd(LL a,LL b)return b?gcd(b,a%b):a;
void solve(LL x)

    for(int i=1;i<=x/i;i++)
    
        if(x%i==0)
        
            mp[i]++;
            if(i==x/i) continue;
            mp[x/i]++;
        
    

int main(void)

    LL a,b; cin>>a>>b;
    solve(gcd(a,b));
    vector<int>ve;
    for(auto i=mp.begin();i!=mp.end();i++)  ve.push_back(i->first);
    sort(ve.begin(),ve.end());
    int q; cin>>q;
    while(q--)
    
        int l,r; cin>>l>>r;
        int L=0,R=ve.size()-1;
        while(L<R)
        
            int mid=L+R+1>>1;
            if(ve[mid]<=r) L=mid;
            else R=mid-1;
        
        if(ve[L]>=l&&ve[L]<=r) cout<<ve[L]<<endl;
        else cout<<-1<<endl;
    
    return 0;

以上是关于Acwing第 30 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章

Acwing第 31 场周赛完结

Acwing第 36 场周赛完结

Acwing第 56 场周赛完结

Acwing第 32 场周赛完结

Acwing第 59 场周赛完结

Acwing第 35 场周赛完结