【回归ACM】【SHNU_RUSHer】信机ACM入门练习3-排序模拟贪心A - Box of Bricks【空行PE解决】

26 篇文章 1 订阅
26 篇文章 0 订阅

A - Box of Bricks

题目链接

[by_041]

题目理解

  • 题目是这样的:要把一堆高低不一的砖块摆平,问最少要动多少块砖(题目保证可以摆平)
  • 数据范围 1 ≤ n ≤ 50 , 1 ≤ h i ≤ 100 1≤n≤50 , 1≤h_i≤100 1n50,1hi100,~~这不是随便过嘛?~~于是码了:
#include<cstdio>

int input()//这个是手打的快速输入函数,效率比scanf高一些
{char ch;
 while((ch=getchar())<'0'||ch>'9');
 int ret=ch-'0';
 while((ch=getchar())>='0'&&ch<='9')
 	ret=(ret<<1)+(ret<<3)+ch-'0';
 return ret;
}

int abss(int val)//取绝对值函数
{return val>=0?val:-val;}

int n,sum,anss,a[55];

int main()
{
 while(n=input())
 	{
 	 	sum=anss=0;//初始化,第一次还因为没有初始化sum WA了一下hhh
 		for(int i=n;i;sum+=a[i--])//输入,sum是取砖块总数
 			a[i]=input();
 		sum/=n;//把sum变成平均数,由于可以摆平,所以一定除尽
 		for(int i=n;i;i--)//计算每个堆需要添加或者拿走块砖数量的绝对值
 			anss+=abss(a[i]-sum);
 		printf("%d\n",anss>>1);
     //因为动过一块砖会经历拿走放下两个操作,所以anss要除以二
     //其中>>1是位运算,表示左移一位,效果就是除以二
 	}
 return 0;
}
  • 然后,,光明的,,PE了 😢

  • yyyyyyy?为社么,,???

  • 题中:Output a blank line between each set.

  • 看到这句话估计很多卡过数据格式的出题人都会会心一笑hhhh

  • 我就说:~~卑鄙无耻下流的,~~真牛啊,您嘞!!

  • 于是又尝试了6次,试过了

    1. 间行,结尾有空行
    2. 间行,结尾没空行
    3. 间空格,结尾没空格
    4. 间空格,结尾有空格
    5. 间两行,结尾没空行
    6. 间两行,结尾有空行
  • 然后就去和dalao对线了,中间骂着骂着讨论着突然想到了一点:

    • 我刚刚试的最后俩次对结尾空格只有两种情况
      • 没空格(0)
      • 有空格(2)
  • 唔,那这么说,~~出题人真的很阴险,~~答案很明显了:

#include<cstdio>

int input()
{char ch;
 while((ch=getchar())<'0'||ch>'9');
 int ret=ch-'0';
 while((ch=getchar())>='0'&&ch<='9')
 	ret=(ret<<1)+(ret<<3)+ch-'0';
 return ret;
}

int abss(int val)
{return val>=0?val:-val;}

int n,sum,anss,a[55];

int main()
{
	n=input();
	anss=sum=0;
 	for(int i=n;i;sum+=a[i--])
 		a[i]=input();
 	sum/=n;
 	for(int i=n;i;i--)
 		anss+=abss(a[i]-sum);
 	printf("%d\n",anss>>1);
 while(n=input())
 	{
 	 	anss=sum=0;
 		for(int i=n;i;sum+=a[i--])
 			a[i]=input();
 		sum/=n;
 		for(int i=n;i;i--)
 			anss+=abss(a[i]-sum);
 		printf("\n%d\n",anss>>1);
 	}
 return 0;
}

AC~~(终于,哭了)~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值