POJ1083

题目LINK

题意解释

题意是从一个房子到另一个房子搬桌子,题意中两个搬桌子的进程中,如果两者在使用走廊的过程中没有重叠的部分那么就可以同时进行。这道题整体的思路是imos算法,就是想象一个轴,轴里有1 2 3 ... n,然后找出每次移动桌子的区间,在用类似俄罗斯方块的方法叠加上去,这道题的最终结果是叠加后最厚区间的高度。(建议自行百度1mos算法,十分直观)

收获

首先这道题的坑有两个。

1.给出的起始点可能小于终点 2.区间算的时候,一定是奇数到偶数,才能做到真正的区间全覆盖

代码技巧
  1. max_element()这个在algorithm的头文件里,非常好用

AC代码

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

typedef struct member{
    int s;
    int j;
}member;

member input[200];

void in(int total){
    int i = 0;
    while(total > 0){
        scanf("%d %d",&input[i].s,&input[i].j);
        if(input[i].s > input[i].j){
            int tmp = input[i].s;
            input[i].s = input[i].j;
            input[i].j = tmp;
        }
        if(input[i].j%2 == 1)input[i].j++;//this is a trap
        if(input[i].s%2 == 0)input[i].s--;//
        total--;
        i++;
    }
}

void solve(int total){
    int i = 0;
    int table[400];
    int cost = 0;
    memset(table,0,sizeof(table));
    while(i < total){
        for(int j = input[i].s; j <= input[i].j; j ++){
            table[j]++;
        }
        i++;
    }
    cout << *max_element(table,table + 400)*10 << endl;
}

int main()
{
    int t,total;
    scanf("%d\n",&t);
    while(t > 0){
        scanf("%d\n",&total);
        in(total);
        solve(total);
        t--;
    }
    return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,874评论 0 33
  • 被介绍了一本好书Ray Dalio的《原则》,本着看好书练英语的原则,我打算每天翻译一页,一周不少于5页,希望坚持...
    财才阅读 183评论 0 0
  • 我很想把这里面认识我的人全部拉黑,这样我就会比较有安全感,真的不喜欢把自己的情绪暴露在认识的人面前,最亲的人都不可...
    隆隆唠嗑小天地阅读 449评论 0 1
  • 陈继科阅读 603评论 0 0

友情链接更多精彩内容