Cardiogram CodeForces - 435C 【模拟+平移思想】

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

思路:模拟。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("");
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务