【#249_DIV2】-A B C

题目链接:http://codeforces.com/contest/435

解题报告:

A - Queue on Bus Stop

水题,直接模拟上车过程即可

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int arr[120];

int main()
{
    int n,m,i,ans=1;
    cin>>n>>m;
    for(i=0;i<n;i++)
        cin>>arr[i];
    int tm=m;
    for(i=0;i<n;i++)
    {
        if(tm>=arr[i]) tm-=arr[i];
        else
        {
            tm = m;
            i--;
            ans++;
        }
    }
    cout<<ans<<endl;

    return 0;
}


B - Pasha Maximizes

贪心,从最前面的位开始考虑,每位都选取 k  范围内最大的数 arr【p】 = tmax 来替代,然后相当于消耗掉 p-i 次机会,再考虑下一个 i 位置。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char str[2222];
int arr[2222];

int main()
{
    //freopen("input.txt","r",stdin);
    int k,i,j;
    scanf("%s",str);
    cin>>k;
    int len = strlen(str);
    for(i=0;i<len;i++) arr[i] = str[i] - '0';
    //for(i=0;i<len;i++)cout<<arr[i]; cout<<endl;
    for(i=0;i<len;i++)
    {
        if(k<=0)break;
        int p=i,tmax=arr[i];
        for(j = i+1; j <= i+k; j++)
        {
            if(arr[j]>tmax)
            {
                tmax = arr[j];
                p = j;
            }
        }
        //cout<<tmax<<endl;
        k -= p-i;
        for(j=p;j>=i+1;j--) arr[j] = arr[j-1];
        arr[i] = tmax;
    }
    for(i=0;i<len;i++)cout<<arr[i]; cout<<endl;
    return 0;
}


C - Cardiogram

模拟水题,考点是英语,出题人自己也知道题意出坑了,还告诉我们WA在第一组数据上没罚时。。。

好吧,开一个大数组直接模拟就行了。不过我用'\0' 截取字符串总出错。。。后来改成记录好空格应该打到哪(变量bor) 就好了。

用'\0' 截取应该是没问题的,为啥会出错我也不清楚,数组太大了??好吧,,大概是运气问题,而且这题确实不用那么截

记好位置再一位一位打印更靠谱

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char grid[2010][1010];

int main()
{
    //freopen("input.txt","r",stdin);
    int n,i,j,num;
    memset(grid,0,sizeof(grid));
    for(i=0;i<2010;i++)
        for(j=0;j<1010;j++) grid[i][j] = ' ';
    cin>>n;
    int ti = 1005,tj = 0;
    for(i=0;i<n;i++)
    {
        cin>>num;
        if(i%2 == 0)
        {
            while(num--)
                grid[ti--][tj++] = '/';
            ti++;
        }
        else
        {
            while(num--)
                grid[ti++][tj++] = '\\';
            ti--;
        }
    }
    for(j=1009;j>=0;j--)
    {
        bool check = false;
        for(i=0;i<2010;i++)if(grid[i][j] != ' ')check = true;
        if(check)break;
    }
    int bor = j+1;
    for(i=0;i<2010;i++)
    {
        bool flag =false;
        for(j=0;j<1010;j++) {
            if(grid[i][j] != ' ') {flag = true; break;}
        }
        if(flag)
        {
            for(j=0;j<bor;j++)
                cout<<grid[i][j];
            cout<<endl;
        }
    }

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值