Codeforences #351 VK CUP

来源:互联网 发布:高校综合数据分析平台 编辑:程序博客网 时间:2024/04/26 20:36

【A. Bear and Game:】

【题意】给这么多时间点,这些时间点是interesting的点,如果连续15分钟不出现interesting的点的话,就要换了;问最长能看多上时间

【分析】直接模拟一下即可。

【AC代码】

#include <bits/stdc++.h>using namespace std;int a[100];int main(){    int n;    while(~scanf("%d",&n)){        for(int i=1; i<=n; i++){            scanf("%d",&a[i]);        }        if(a[1]>15){            puts("15");            return 0;        }        for(int i=2; i<=n; i++){            if(a[i]-a[i-1]>15){                printf("%d\n",a[i-1]+15);                return 0;            }        }        if(a[n]<75)        {            cout<<a[n]+15<<endl;        }        else{            cout<<"90"<<endl;        }    }    return 0;}

【B. Problems for Round】

【题意】把1到n这些数放到两个容器里,要求第一个容器里的任何数都小于第二个容器里的任何数,还有就是相似的不能放一块,相似没有传递性

【分析】两个容器第一个记录最大值,第二个记录最小值,对每一对相似的数,小的放在第一个,大的放在第二个,同时检测是否满足最大值最小值,还要更新最大最小,答案就是两者的差!

【AC代码】

#include <bits/stdc++.h>using namespace std;int a[100010];const int INF = 0x3f3f3f3f;int main(){    int n,m,u,v,maxx=-1,minn=INF,ans;    cin>>n>>m;    for(int i=1; i<=m; i++){        cin>>u>>v;        if(u>v)swap(u,v);        maxx = max(maxx,u);        minn = min(minn,v);    }    if(m==0)ans=n-1;    else{            if(minn<maxx) ans=0;            else ans = minn-maxx;    }    cout<<ans<<endl;    return 0;}

【C. Bear and Colors】

【题意】给出这么多颜色,在一个序列中,dominant是出现次数最多的数,如果出现次数最多的不止一个,那么就是数值最小的那个

【分析】可以直接暴力统计了

【AC代码】

#include <bits/stdc++.h>using namespace std;int n,a[5010];int ans[5010];int temp;int main(){    cin>>n;    for(int i=1; i<=n; i++) cin>>a[i];    for(int i=1; i<=n; i++){        int cnt[5010]={0};        int maxx=-1;        for(int j=i; j<=n; j++){            cnt[a[j]]++;            if(cnt[a[j]]>maxx){                maxx = cnt[a[j]];                temp = a[j];            }else if(cnt[a[j]]==maxx&&a[j]<temp){                temp = a[j];            }            ans[temp]++;        }    }    for(int i=1; i<=n; i++)cout<<ans[i]<<" ";    return 0;}

【D. Bear and Two Paths】

【题意】给出n个节点,然后给出两条路线的起点和终点,要求你构造一个无向图,使无向图中a,b之间和c,d之间均无直接相连的边,且要求这个图的边的条数不超过k

【分析】发现n==4时怎么都不可能满足,可以构造这样的无向图,第一条路线ac...db;第二条路线ca...bd,这样的边是n+1条,是最少的了

【AC代码】

#include <bits/stdc++.h>using namespace std;int n,k,a,b,c,d;int ans[1010],vis[1010];int main(){    cin>>n>>k;    cin>>a>>b>>c>>d;    memset(vis,0,sizeof(vis));    memset(ans,0,sizeof(ans));    vis[a]=vis[b]=vis[c]=vis[d]=1;    if(k<n+1||n==4){        puts("-1");        return 0;    }    ans[1]=a,ans[2]=c,ans[n-1]=d,ans[n]=b;    int pos=3;    for(int i=1; i<=n; i++){        if(!vis[i]) ans[pos++]=i;    }    for(int i=1; i<=n; i++)cout<<ans[i]<<" ";cout<<endl;    cout<<ans[2]<<" "<<ans[1]<<" ";    for(int i=3; i<=n-2; i++)cout<<ans[i]<<" ";    cout<<ans[n]<<" "<<ans[n-1]<<endl;    return 0;}

【ps:后面的题暂时做不来QAQ】

0 0
原创粉丝点击