zoukankan      html  css  js  c++  java
  • 洛谷P1188PASTE题解

    题目

    这个题主要是一个考分类讨论的模拟题,做这个提的时候首先要脑子清醒,才可以清楚地写出怎么模拟来。

    (Code)

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #define N 100100
    using namespace std;
    int n, k, ans[N], cv[N];
    int main()
    {
        scanf("%d%d", &n, &k);
        for (int i = 1; i <= n; i++)
            ans[i] = i;
        for (int i = 1; i <= k; i++)
        {
            int a, b, c;
            scanf("%d%d%d", &a, &b, &c);
            int len = b - a + 1, cnt = 0;
            int w1 = c + 1;
            int w2 = c + len;
            for (int i = a; i <= b; i++) cv[++cnt] = ans[i];
            if (w1 < a) for (int i = a - 1; i >= w1; i--) ans[i + len] = ans[i];//因为要w1到a-1这段数要向后移,且a~b这段已经被剪切了,所以不用管,然后用01背包的思想来写能够保证不会出现len=1,ans反复被更新的情况		
            else for (int i = b + 1; i <= w2; i++) ans[i - len] = ans[i];//这次剪切之后,因为w1>a所以导致a之前的数不变,而b~w2将要向左补位len位
            for (int i = w1; i <= w2; i++)
                ans[i] = cv[i - w1 + 1];
        }
        for (int i = 1; i <= 10; i++)	
            printf("%d
    ", ans[i]);
    }
    
  • 相关阅读:
    1034: [ZJOI2008]泡泡堂BNB
    1084: [SCOI2005]最大子矩阵
    1046: [HAOI2007]上升序列
    LIS最长上升子序列模板
    1070: [SCOI2007]修车
    1057: [ZJOI2007]棋盘制作
    1066: [SCOI2007]蜥蜴
    1059: [ZJOI2007]矩阵游戏
    1050: [HAOI2006]旅行comf
    1083: [SCOI2005]繁忙的都市
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/10505835.html
Copyright © 2011-2022 走看看