“师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛【9/10】

来源:互联网 发布:网络设计方案案例 编辑:程序博客网 时间:2024/05/18 03:32


G题题面描述有问题,游戏体验--.

四个小时的经验积累训练,变成了水题大会。

G题Wa到怀疑人生。


A.水题。

B.开起来是个裸的区间更新问题,但是后台数据卡了这个Log.

我们需要维护一个sum【i】,表示到位子i,其需要增加的倍数。

那么对应输入进来的一个区间l,r,我们sum【l】+=val,sum【r+1】-=val即可。

那么之后O(n)扫这个数组,对应到每个位子i,我们将倍数now+=sum【i】,然后统计结果output+=now*a【i】即可。


Ac代码:

#include<stdio.h>#include<string.h>using namespace std;#define ll long long intll a[100500];ll sum[100500];int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        memset(a,0,sizeof(a));        memset(sum,0,sizeof(sum));        for(int i=1;i<=n;i++)scanf("%lld",&a[i]);        while(m--)        {            int l,r,val;            scanf("%d%d%d",&r,&l,&val);            sum[l]+=(ll)(val);            sum[r+1]+=(ll)(-val);        }        ll output=0;        ll now=1;        for(int i=1;i<=n;i++)        {            now+=sum[i];            output+=a[i]*now;        }        printf("%lld\n",output);    }}

C.求一个lcm就行了。ans=lcm/m;

D.四个维度的Bfs,水题。


#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{    int x,y,z,w,step;}now,nex;char a[33][33][33][33];int vis[33][33][33][33];int nx,ny,nz,nw;int sx,sy,sz,sw;int fx[8]={0,0,0,1,0,0,0,-1};int fy[8]={0,0,1,0,0,0,-1,0};int fz[8]={0,1,0,0,0,-1,0,0};int fw[8]={1,0,0,0,-1,0,0,0};void Bfs(){    memset(vis,0,sizeof(vis));    now.x=sx;    now.y=sy;    now.z=sz;    now.w=sw;    now.step=0;    vis[now.x][now.y][now.z][now.w]=1;    queue<node>s;    s.push(now);    while(!s.empty())    {        now=s.front();        if(a[now.x][now.y][now.z][now.w]=='E')        {            printf("%d\n",now.step);            return ;        }        s.pop();        for(int i=0;i<8;i++)        {            nex.x=now.x+fx[i];            nex.y=now.y+fy[i];            nex.z=now.z+fz[i];            nex.w=now.w+fw[i];            nex.step=now.step+1;            if(nex.x>=0&&nex.x<nx&&nex.y>=0&&nex.y<ny&&nex.z>=0&&nex.z<nz&&nex.w>=0&&nex.w<nw)            {                if(vis[nex.x][nex.y][nex.z][nex.w]==0&&a[nex.x][nex.y][nex.z][nex.w]!='#')                {                    vis[nex.x][nex.y][nex.z][nex.w]=1;                    s.push(nex);                }            }        }    }    printf("WTF\n");    return ;}int main(){    while(~scanf("%d%d%d%d",&nx,&ny,&nz,&nw))    {        sx=-1;sy=-1;sz=-1;sw=-1;        for(int i=0;i<nx;i++)        {            for(int j=0;j<ny;j++)            {                for(int k=0;k<nz;k++)                {                    scanf("%s",a[i][j][k]);                    for(int l=0;l<nw;l++)                    {                        if(a[i][j][k][l]=='S')                        {                            sx=i;                            sy=j;                            sz=k;                            sw=l;                        }                    }                }            }        }        if(sx==-1)        {            printf("WTF\n");            continue;        }        Bfs();    }}

E.回头补

F.一个规律题。我是萌萌哒F题题解

G.Dp+贪心,很水的一道题,只不过比赛过程中题面描述有问题真的很不开心。我是萌萌哒G题题解

H.奇偶博弈。随便判断一下就行。

I.树状数组随便搞,水题。我是萌萌哒I题题解

J.暴力一下就行。





阅读全文
0 0
原创粉丝点击