首页 > 其他分享 >SMU Summer 2023 Contest Round 3

SMU Summer 2023 Contest Round 3

时间:2023-07-14 19:46:57浏览次数:45  
标签:Summer typedef const Contest int SMU long -- solve

SMU Summer 2023 Contest Round 3

A - Curriculum Vitae

思路:要求0后不能有1,当某个数都不删时,值为前面所有的0的个数加后面所有1的个数,求出最大即可

#include<bits/stdc++.h>
using namespace std;
#define  int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,M=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;
typedef long long ll;



void solve(){
    int n;cin>>n;
    vector<int>a(n),b(n),c(n);
    for(int i=0;i<n;++i)cin>>a[i];
    b[0]=(a[0]==0);
    for(int i=1;i<n;++i){
        b[i]=b[i-1]+(a[i]==0);
    }
    c[n-1]=a[n-1];
    for(int i=n-2;i>=0;--i)
        c[i]=c[i+1]+a[i];
    int res=0;
    for(int i=0;i<n;++i){
        res=max(res,b[i]+c[i]);
    }
    cout<<res;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

B - Math Show

思路:枚举完成k个任务时的分数,求最大值

#include<bits/stdc++.h>
using namespace std;
#define  int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,M=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;
typedef long long ll;



void solve(){
    int n,k,m,cnt=0;cin>>n>>k>>m;
    vector<int>a(k+1);
    for(int i=1;i<=k;++i)cin>>a[i],cnt+=a[i];
    sort(a.begin(),a.end());
    int res=0;
    for(int i=0,c,mm;i<=n&&i*cnt<=m;++i){
        c=i*(k+1);
        mm=m-i*cnt;
        for(int j=1;j<=k;++j){
            int s=min(mm/a[j],n-i);
            c+=s;mm-=s*a[j];
        }
        res=max(res,c);
    }
    //if(m==0)res=0;
    cout<<res;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

C - Four Segments

思路:要求分成四段 / 求三个分界线,可以枚举第二条,再分别左右遍历出第一和第三条的最大情况

#include<bits/stdc++.h>
using namespace std;
#define  int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,M=5000000000000+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;
typedef long long ll;



void solve(){
    int n;cin>>n;
    vector<int>a(n+1);
    int d1,d2,d3,all=-M;
    for(int i=1;i<=n;++i)cin>>a[i],a[i]+=a[i-1];
    for(int i=0;i<=n;++i){
        int x=-M,y=-M,dd1=0,dd2=n;
        for(int j=0;j<=i;++j){
            int s1=a[j]-a[0];
            int s2=a[i]-a[j];
            int s=s1-s2;
            if(s>x){
                dd1=j;x=s;
            }
        }
        for(int j=i;j<=n;++j){
            int s1=a[j]-a[i];
            int s2=a[n]-a[j];
            int s=s1-s2;
            if(s>y){
                dd2=j;y=s;
            }
        }
        if(x+y>all){
            all=x+y;
            d1=dd1,d2=i,d3=dd2;
        }
    }//cout<<all<<'\n';
    cout<<d1<<' '<<d2<<' '<<d3;

}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

D - Monitor

思路:二分k

#include<bits/stdc++.h>
using namespace std;
#define  int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,M=5000000000000+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;
typedef long long ll;



void solve(){
    int n,m,k,q,ans=-1;cin>>n>>m>>k>>q;
    vector<int>x(q+1),y(q+1),t(q+1);
    vector<vector<int>>ve(n+1,vector<int>(m+1));
    for(int i=1;i<=q;++i)cin>>x[i]>>y[i]>>t[i];
    int l=0,r=1000000000;
    while(l<=r){
        int mid=l+r>>1;
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)ve[i][j]=0;
        for(int i=1;i<=q;++i)
            if(t[i]<=mid)ve[x[i]][y[i]]=1;
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                ve[i][j]+=ve[i-1][j]+ve[i][j-1]-ve[i-1][j-1];
        bool ok=false;
        for(int i=k;i<=n;++i){
            for(int j=k;j<=m;++j){
                if((ve[i][j]-ve[i-k][j]-ve[i][j-k]+ve[i-k][j-k])==k*k)ok=true;
            }
            if(ok)break;
        }
        if(ok)ans=mid,r=mid-1;
        else l=mid+1;
    }
    cout<<ans;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

F - Random Query

思路:期待值=∑该区间的概率*该区间不同元素的个数=区间概率*∑该区间不同元素的个数(每个区间的概率相同)。

∑该区间不同元素的个数=每个元素的贡献值,f(i)表示前i个数的总贡献。

f[i]状态转移:f[i]=f[i-1]+(i-pre[i]),pre[i]表示上一个与a[i]出现的位置,a[i]在 [pre[i]+1,i] 做贡献

a[i]的实际贡献为f[i]*2-1,因为l,r可交换,l和r相等时[l,r]和[r,l]情况相同。

for (int i = 1; i <= n; ++i) {
        cin>>a[i];
        f[i]=f[i-1]+i-pre[a[i]];
        ans+=2.0*f[i]-1;
        pre[a[i]]=i;
    }
View Code

 

标签:Summer,typedef,const,Contest,int,SMU,long,--,solve
From: https://www.cnblogs.com/bible-/p/17554750.html

相关文章

  • SMU Summer 2023 Contest Round 2
    SMUSummer2023ContestRound2A-TreasureHunt思路:判断Δx和Δy能否分别整除x和y,求出需要的步数,两者的步数须同奇或同偶#include<bits/stdc++.h>usingnamespacestd;//#defineintlonglongtypedefpair<int,int>PII;typedefpair<string,int>PSI;type......
  • SMU Summer 2023 Contest Round 1
    SMUSummer2023ContestRound1A-TheContest思路:求出最短解决问题总时间,在所有区间找出大于等于总时间的最短时刻。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<strin......
  • SMU Summer 2023 Contest Round 3
    A.CurriculumVitae题意:给出一串01序列,可以删除任意个元素,使得1后面没有0思路:枚举01分界点,使得统计前面0的个数和后面1的个数,取最大值。点击查看代码#include<bits/stdc++.h>usingnamespacestd;inta[110];intmain(){ios::sync_with_stdio(0),cin.tie(0),co......
  • AtCoder Beginner Contest 294
    A-Filter#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);intn;cin>>n;for(intx;n;n--){cin>&......
  • AtCoder Beginner Contest 309 - D(最短路)
    目录D-AddOneEdge法一:dijkstra法二:BFS+队列题目传送门:abc309前面的简单题就不放了D-AddOneEdge题意:给你一个无向图图,分为两个连通块,一个顶点数为n1(1~n1),一个顶点数为n2(n1+1~n1+n2),图中共有m条边。如果现在在两个连通块之间连接一条边,那么顶点1与顶点n1+n2......
  • SMU Summer 2023 Contest Round 1
    A.TheContest题意:要做n道题,每道题花费时间a[i],但是只有几个时间段可以提交,问最早什么时间可以完成。思路:直接计算做完全部的题目所花费的时间,然后找到可以提交的时间段,和左端取最大值,就能得出结果。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constint......
  • AtCoder Beginner Contest 162
    AtCoderBeginnerContest162ABCD全暴力E数学题看不懂,感性理解F线性dp,非常基础我不会,寄E-SumofgcdofTuples(Hard)看了题解发现好多做法都是推一堆式子,我实在看不懂(卷积莫反啥啥的呜呜呜)然后看见这个感觉比较好感性理解:(来自洛谷题解)#include<bits/stdc++.h>#def......
  • Atcoder Regular Contest 114 F - Permutation Division
    显然分成\(k\)段以后,最大化形成的排列的字典序的策略是将所有段按第一个元素的大小降序排列。由于最终排列的字典序肯定\(\ge\)原排列的字典序,因此我们考虑最大化最终排列与原排列的LCP,这部分就考虑二分答案,记\(dp_i\)表示以\(p_1\)开始\(p_i\)结尾的LDS的长度,那么......
  • AtCoder Regular Contest 164 A~C
    A题都没做出来(被自已菜晕A.TernaryDecompositionA-TernaryDecomposition(atcoder.jp)题意给定一个正整数\(N\),问是否存在\(K\)个整数,使得\(N=3^{m_1}+3^{m_2}+...+3^{m_k}\)思路首先对于一个正整数\(N\),最多有\(N\)个整数使得正式成立,即\(m_i\)全为0。再对\(N\)进行三......
  • SMU Summer 2023 Contest Round 3
    SMUSummer2023ContestRound3A.CurriculumVitae题意就是要求\(1\)后面不能有\(0\)的情况下的子序列最长长度,也就是求一个最长不下降子序列,不过由于这是个\(01\)序列,也可以分别做一个前缀和求出\(0\)的数量,后缀和求\(1\)的数量,最后跑一遍循环,找一个最大值即可,这里......