Acwing第 48 场周赛完结

Posted 辉小歌

tags:

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

https://www.acwing.com/activity/content/1698/

目录

4410. 吃鸡蛋【模拟】

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int st[N],n,m,ans;
int main(void)

    cin>>n>>m;
    for(int i=1;i*m<=1e3;i++) st[i*m]=1;
    for(int i=1;i<N;i++)
    
       if(st[i-1]) ans++;
       else 
       
           if(n) n--,ans++;
           else break;
       
    
    cout<<ans;
    return 0;

4411. 三仙归洞【找周期】

#include<bits/stdc++.h>
using namespace std;
int a[15][15]=

    0,1,2,
    1,0,2,
    1,2,0,
    2,1,0,
    2,0,1,
    0,2,1,
;
int main(void)

    int n,x; cin>>n>>x;
    n=n%6;
    cout<<a[n][x];
    return 0;

4412. 构造数组【思维】


思维你会发现,将这些区间合并。答案==2^(区间个数-1)

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5*2+10;
const int mod= 998244353;
int a[N],n;
map<int,vector<int>>mp;
int main(void)

    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) mp[a[i]].push_back(i);
    vector< pair<int,int> >ve;
    for(auto i=mp.begin();i!=mp.end();i++)
    
        auto temp=i->second;
        ve.push_back(temp[0],temp[temp.size()-1]);
    
    sort(ve.begin(),ve.end());
    int l=ve[0].first,r=ve[0].second;
    int cnt=1;//区间合并,看有多少个不相交的区间
    for(int i=1;i<ve.size();i++)
    
        int j=i,temp=-1;
        while(j<ve.size()&&ve[j].first<r) temp=max(temp,ve[j].second),j++;
        if(temp!=-1)  r=temp,i=j-1;
        else cnt++,l=ve[i].first,r=ve[i].second;
    
    LL sum=1;
    for(int i=2;i<=cnt;i++) sum=sum*2%mod;
    cout<<sum;
    return 0;

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

Acwing第 53 场周赛完结

Acwing第 31 场周赛完结

Acwing第 36 场周赛完结

Acwing第 56 场周赛完结

Acwing第 32 场周赛完结

Acwing第 59 场周赛完结