[Codeforces] Round #249 (Div. 2)解题报告(ABC)

本文提供CodeForces 435竞赛中三道题目的解题思路与代码实现:A.Queue on Bus Stop利用直接判断解决排队问题;B.Pasha Maximizes通过贪心策略最大化数字;C.Cardiogram采用模拟方法绘制心电图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

状态不是很好...手速不强啊

A. Queue on Bus Stop

http://codeforces.com/contest/435/problem/A

刷榜题 直接判断

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
int i,o,p,j,k,l,n,m,ans,cur;
int a[200000],b[200000];
int main()
{
	scanf("%d%d",&n,&m);
	for (i=1;i<=n;i++)
		scanf("%d",&a[i]);
//	for (i=1;i<=n;i++)
//		scanf("%d",&b[i]);
//sort(a,n,cnp);
	ans=1;cur=0;
	for (i=1;i<=n;i++)
		if (cur+a[i]<=m) cur+=a[i];
		else {cur=a[i];ans++;}
	printf("%d\n",ans);
    return 0;
}



B. Pasha Maximizes

http://codeforces.com/contest/435/problem/B

贪心 观察在目前条件允许的情况下能否将最靠左的数字换得尽可能大,如果次数还有剩余,就考虑最靠左的第二位会不会尽量大……以此类推

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
int i,o,p,j,k,l,m,ans,cur,left,right,mann,ma;
long long n;
int a[2000],b[1000];
void printi()
{
	for (i=1;i<=o;i++) printf("%d",a[i]);
	printf("\n");
}
int main()
{
	scanf("%I64d%d",&n,&m);
	o=0;
	while (n)
	{
		o++;
		(a[o]=n%10);
		n/=10;
	}
	for (i=1;i<=o/2;i++)
	swap(a[i],a[o+1-i]);
	left=1;right=o;
	while (1)
	{
		p=0;
		for (i=left+1;i<=right;i++) 
		if (a[i]>a[i-1]) p=1;
		if (p==0) {printi(); return 0;}
		memset(b,0,sizeof(b)); 
		mann=a[left];
		ma=left;
		for (i=left+1;i<=right;i++)		
		{
			if (mann<a[i]&&(m>=i-left)) {mann=a[i];ma=i;}
		}
		for (i=ma;i>left;i--)
			swap(a[i],a[i-1]);
		m-=ma-left;
		left++;
		if (left==right){printi(); return 0;}
	}
	return 0;
}

C. Cardiogram

http://codeforces.com/contest/435/problem/C

比较复杂道德题目,看样例,直接模拟。我用了b数组表示在横坐标为i时,纵坐标为b[i],c[i]表示方向。数据范围不大直接线性处理

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
int i,o,p,j,k,l,n,m,ans,cur,ma,mi;
int a[2000],b[2000],c[2000];
int main()
{
    scanf("%d",&n);
    for (i=1;i<=n;i++)
        scanf("%d",&a[i]);
    a[0]=0;
    ma=mi=0;
    o=0;;
    b[0]=0;
    for (i=1;i<=n;i++){
        b[++o]=b[o-1];
        if (i%2)c[o]=1;
        else    c[o]=-1;
        for (j=2;j<=a[i];j++){
        if (i%2)b[++o]=(b[o-1]-1);
        else    b[++o]=(b[o-1]+1);
        if (i%2)c[o]=1;
        else    c[o]=-1;
        if (ma<b[o]) ma=b[o];
        if (mi>b[o]) mi=b[o];}
    }
    for (i=mi;i<=ma;i++){
        for (j=1;j<=o;j++)
        if (b[j]==i) if (c[j]>0) printf("/"); else printf("\\");
        else printf(" ");
        printf("\n");}
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值