codeforces #325

来源:互联网 发布:佐治亚州知乎 编辑:程序博客网 时间:2024/05/23 16:25

Codeforces Round #325 题解

打得太烂。。本以为过了三题结果第三题FST,wa12了,还没改好,先写AB两水的吧
P.S. 事实上是想试试markdown编辑的感觉,这篇暂时没什么营养的题解是用markdown编辑的

A:Alena’s Schedule

题意:一个人去学校上课,每天的课程安排表示为一串0与1的数字,1代表这个时候有课,0代表没课,主人公保证在每天的第一节课的时候到校(不迟到但也不提前到),而他又很注意休息,每当他上完一节课后,如果他接下来有连续两节课以上的时间没有课,那么他就回家休息,如果只有一节课的空闲或者没有空闲就继续呆在学校。如果发现全天的课已经全部上完,就立刻回家。 给出课程安排,计算全天的在校时间。
不难处理,我们只需要遍历这个数串(规模很小。。)对每一个“1”,看它后两位,如果是“01”,对应不回家休息的情况,就把那个0抹成1就行
这样处理完之后,再统计改写后的数串有多少个1就行了
然而有一个问题不容忽视,在这种处理下,最后一个数位可能只有一个0,而被处理为继续留在学校,而实际情况是直接回家,所以为了补救,我们在最后一位之后再添加一个0
code:

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<stack>#include<queue>#include<algorithm>#include<cstdlib>#define maxn 201314#define inf 0x3f3f3f3f#define LL long longusing namespace std;int a[110];int n;int main(){    cin>>n;    for(int i=0;i<n;i++)    {        cin>>a[i];    }    a[n]=0;    int ans=0;    for(int i=0;i<n-1;i++)    {        if(a[i]==1)        {            if((!a[i+1])&&(a[i+2]))                a[i+1]=1;        }    }    for(int i=0;i<n;i++)    {        if(a[i])ans++;    }    cout<<ans<<endl;}

B:Laurenty and Shop

题意:一个小镇的格局是:两排房屋,每排n个。现在主人公想从第一排的第一个走到第二排的最后一个。同一排所有相邻房屋之间的过路时间给出,两排之间相同位置的房屋之间的过路时间给出,求两条不相同的尽量短路径。
路径是有要求的,由于主人公一定会从第一排穿到第二排,题目要求单程只能穿马路一次,这意味着路径是个最简单的折线形。
乍一看还以为是搜索或者dp,吓一跳。。仔细一看,路径只有n种,把他们都找出来排序(规模很小,直接快排),输出最短的那两个即可。
找路径的方法不难写,感觉这段写的挺好的,维护第一排道路的前缀和,第二排的后缀和

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<stack>#include<queue>#include<algorithm>#include<cstdlib>#define maxn 201314#define inf 0x3f3f3f3f#define LL long longusing namespace std;int a[55];int b[55];int c[55];int pa[55],pb[55];int q[55];int n;int main(){    cin>>n;    pa[0]=0;    for(int i=1;i<=n-1;i++)    {        cin>>a[i];        pa[i]=pa[i-1]+a[i];    }    for(int i=1;i<=n-1;i++)    {        cin>>b[i];    }    pb[n+1]=0;    for(int i=n;i>=1;i--)    {        pb[i]=pb[i+1]+b[i];    }    for(int i=0;i<n;i++)    {        cin>>c[i];        q[i]=pa[i]+c[i]+pb[i+1];    }    sort(q,q+n);    int ans=q[0]+q[1];    cout<<ans<<endl;}
0 0
原创粉丝点击