codeforces-#479B. Towers(模拟)

这篇博客介绍了Codeforces上的一道编程题目#479B - Towers,讨论了题目的错误理解以及正确的解题思路。博主在做题时误将题目理解为塔间高度差,但在某些样例中仍得出正确答案。正确的解法是首先对塔高排序,然后在允许的移动次数k内,每次将最高塔的塔顶移动到最低塔,直到相邻两塔高度差小于等于1。代码实现中需要特别处理首次转移的情况。
摘要由CSDN通过智能技术生成

        题目大意:给出n个塔的高度,每次只能移动塔顶的一个给另一个塔,求在k次范围内,最高塔与最低塔高度最小值的移动情况。

        解题报告:做题的时候把题看错了,以为是每个塔之间的高度差,关键是用例居然还能推得过去。写了好久好多结果都错。今天才发现时最高和最低的高度,太伤心了,又掉分了。做法就是对塔高进行排序,然后K次循环将最高的给最低的,然后记录转移步骤,再次排序判断。只要高度差大于1则可以继续移动的,因此高度差小于等于1则跳出,否则要转移k次。注意对第一次进入的特判,详见code。

        题目来源:http://codeforces.com/problemset/problem/479/B

       code:

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

const int MAXN = 1000+10;
int n,k,ans,tmp;
int st[MAXN][MAXN];

struct point{
    int x,w;
}p[MAXN];

int cmp(point a,point b){
    return a.w>b.w;
}

int main(){
    //freopen("input.txt","r",stdin);
    while(~scanf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值