A - Box of Bricks
[by_041]
题目理解
- 题目是这样的:要把一堆高低不一的砖块摆平,问最少要动多少块砖(题目保证可以摆平)
- 数据范围 1 ≤ n ≤ 50 , 1 ≤ h i ≤ 100 1≤n≤50 , 1≤h_i≤100 1≤n≤50,1≤hi≤100,~~这不是随便过嘛?~~于是码了:
#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次,试过了
- 间行,结尾有空行
- 间行,结尾没空行
- 间空格,结尾没空格
- 间空格,结尾有空格
- 间两行,结尾没空行
- 间两行,结尾有空行
-
然后就去和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~~(终于,哭了)~~