• POJ 1230 Pass-Muraille#贪心+vector迭代器用法


    (~ ̄▽ ̄)~*

    (注意下面代码中关于iterator的用法,此代码借鉴某大牛)

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<cstring>
    using namespace std;
    
    struct Wall
    {
        int row;//表示墙在哪行
        int left;
        int right;
    };
    
    int col[105];//保存每列的墙数
    vector<Wall> wall;
    
    int main()
    {
        int t,n,k,ax,ay,bx,by;
        scanf("%d",&t);
        while(t--)
        {
            wall.clear();
            memset(col,0,sizeof(col));
            scanf("%d%d",&n,&k);
            int maxright=0;
            int cnt=0;
            while(n--)
            {
                scanf("%d%d%d%d",&ax,&ay,&bx,&by);
                if(ax>bx)
                    swap(ax,bx);//有可能先输入墙的右端点
                if(bx>maxright)
                    maxright=bx;
    
                Wall temp;
                temp.row=ay; temp.left=ax; temp.right=bx;
                wall.push_back(temp);
                for(int i=ax;i<=bx;i++)
                    col[i]++;
            }
            int maxt;
            for(int i=0;i<=maxright;i++)
            {//前面maxright记录了所有墙中的最右端,这样遍历的时候,在maxright结束即可
                while(col[i]>k)
                {//遍历每列,当该列的墙数>k,说明需要删墙了
                    vector<Wall>::iterator it=wall.begin();//遍历迭代器
                    vector<Wall>::iterator iter;//临时迭代器
                    maxt=0;
                    while(it!=wall.end())
                    {//把右边界最大(right大于maxt)的墙(用iter记录)删掉(erase vector元素wall中的第iter个元素)
                        if((*it).left<=i)
                        {
                            if((*it).right>maxt)
                            {
                                maxt=(*it).right;
                                iter=it;
                            }
                        }
                        it++;
                    }
                    for(int j=(*iter).left;j<=(*iter).right;j++)
                        col[j]--;//删掉墙相关的记录
                    wall.erase(iter);//删掉墙
                    cnt++;
                }
            }
            printf("%d
    ",cnt);
        }
        return 0;
    }
  • 相关阅读:
    ZOJ3861 Valid Pattern Lock
    ZOJ 3866 Cylinder Candy
    hdu 1729 Stone Game SG函数
    hdu 2546 饭卡 01背包
    hdu 2084 数塔
    中国科学院大学生创新实践训练计划-
    中国科技论文在线期刊模板出现了格式问题,怎么解决?
    1015. 德才论 (25)
    1014. 福尔摩斯的约会 (20)
    Ubuntu 14.0的安装及联网
  • 原文地址:https://www.cnblogs.com/atmacmer/p/5210763.html
Copyright © 2020-2023  润新知