Cardiogram CodeForces

来源:互联网 发布:java 封装规则 编辑:程序博客网 时间:2024/06/05 00:15

题意:已知心电图的几个拐点(心电图是折现构成的),要求你用/和\代表斜线输出心电图

思路:模拟。SORT一下坐标x。比较麻烦的就是 x,y轴 你怎么给应用到一个 二维数组 里来。对于这个情况,我们需要把坐标原点给搞到一个合适的地方。然后注意一下输出。还是看代码把,解释很麻烦。

数据分析: 不分析,没什么特别的数据

复杂度分析:不分析,没什么特别的地方

错误分析:空格没输出对。对于空格,你可以先把空格用1输出,然后看看空格的情况和题目要求是不是一致

#include <bits/stdc++.h>using namespace std;typedef long long ll;int a[1500];int ans=0;int pre1[2000];int pre2[2000];char mp[1500][1500];int sy=0;struct node{    int x,y;}p[2000];bool cmp(const node a,const node b){    return a.x < b.x;}int main(void){    int n;    cin >> n;    for(int i=1;i<=n;i++)    {        int t;        scanf("%d",&a[i]);        pre1[i]+=pre1[i-1]+a[i];        if(i%2==0)  t=-a[i];        else    t=a[i];        pre2[i]+=pre2[i-1]+t;        //cout << pre2[i] << endl;    }    p[0].x=p[0].y=0;    for(int i=1;i<=n;i++)    {        p[i].x=pre1[i];        p[i].y=pre2[i];    }    sort(p,p+n+1,cmp); // 对x进行排序    /*for(int i=0;i<=n;i++)        printf("%d %d\n",p[i].x,p[i].y);*/    int miny=INT_MAX,maxy=INT_MIN;    for(int i=0;i<=n;i++)// 找出Y坐标相差的最大值    {        miny=min(miny,p[i].y);        maxy=max(maxy,p[i].y);    }    sy+=maxy+(-miny);// 确定起点sy当时输错了,把sy当做sx把    //printf("%d %d \n",miny ,maxy);    //对于每个点,我们根据sx的位置,进行移动    for(int i=0;i<=n;i++)    {        p[i].y=sy-(p[i].y+(-miny));    }    for(int i=0;i<=n-1;i++) // 取点    {        int x1,x2,y1,y2;        x1=p[i].x;        x2=p[i+1].x;        y1=p[i].y;        y2=p[i+1].y;        if(y1>y2)// 判断y的关系,确定用/还是\        {            x1++,y1--;            while(x1<=x2)            {                mp[x1][y1+1]=47; // 注意一下是y1+1                x1++,y1--;            }        }        else if(y1<y2)        {            x1++,y1++;            while(x1<=x2)            {                mp[x1][y1]=92;                x1++,y1++;            }        }    }    for(int i=1;i<=sy;i++)    {        for(int j=1;j<=pre1[n];j++)        {            if(mp[j][i]==47) //输出注意一下是mp[j][i]                printf("%c",47);            else if(mp[j][i]==92)                printf("%c",92);            else    printf(" ");        }        puts("");    }}
原创粉丝点击