zoukankan      html  css  js  c++  java
  • codeforces 527C Glass Carving

    传送门:http://codeforces.com/problemset/problem/527/C
    题目大意:你有一块玻璃,你可以横切(H)或者竖切(V),问你在每一步的时候这块玻璃上最小的那一块是什么。
    解题思路:
    你需要set以及mutiset来维护长度以及切的地方,然后暴力(手动滑稽)。
    ac程序

    //
    //  main.cpp
    //  glass carving
    //
    //  Created by zhangdenny on 16/7/11.
    //  Copyright (c) 2016年 Kirito. All rights reserved.
    //
    
    #include  <functional>
    #include  <algorithm>
    #include  <exception>
    #include  <stdexcept>
    #include  <streambuf>
    #include  <iterator>
    #include  <string.h>
    #include  <stdlib.h>
    #include  <typeinfo>
    #include  <valarray>
    #include  <iostream>
    #include  <sstream>
    #include  <istream>
    #include  <stdio.h>
    #include  <climits>
    #include  <clocale>
    #include  <complex>
    #include  <csetjmp>
    #include  <csignal>
    #include  <cstdarg>
    #include  <cstddef>
    #include  <ctype.h>
    #include  <cassert>
    #include  <cstdlib>
    #include  <utility>
    #include  <cstring>
    #include  <numeric>
    #include  <ostream>
    #include  <cwctype>
    #include  <fstream>
    #include  <iomanip>
    #include  <math.h>
    #include  <bitset>
    #include  <cctype>
    #include  <string>
    #include  <vector>
    #include  <limits>
    #include  <locale>
    #include  <memory>
    #include  <cerrno>
    #include  <iosfwd>
    #include  <cfloat>
    #include  <cstdio>
    #include  <cwchar>
    #include  <cmath>
    #include  <ctime>
    #include  <deque>
    #include  <queue>
    #include  <stack>
    #include  <list>
    #include  <ios>
    #include  <map>
    #include  <set>
    #include  <new>
    #define fi first
    #define se second
    #define np next_permutation
    #define ll long long
    #define pb push_back
    using namespace std;
    multiset<int> sh1,sv1;
    set<int> sh,sv;
    int n,m,k;
    int main()
    {
        cin>>n>>m>>k;
        sh1.insert(m);
        sv1.insert(n);
        sh.insert(m);
        sh.insert(0);
        sv.insert(n);
        sv.insert(0);
        for(int i=0;i<k;i++)
        {
            char s;
            int a;
            cin>>s>>a;
            if(s=='H')
            {
                sh.insert(a);
                set<int>::iterator it=sh.find(a);
                it--;
                int it1=*it;
                it++;
                it++;
                int it2=*it;
                sh1.erase(sh1.find(it2-it1));
                sh1.insert(it2-a);
                sh1.insert(a-it1);
            }
            else
            {
                sv.insert(a);
                set<int>::iterator it=sv.find(a);
                it--;
                int it1=*it;
                it++;
                it++;
                int it2=*it;
                sv1.erase(sv1.find(it2-it1));
                sv1.insert(it2-a);
                sv1.insert(a-it1);
            }
            set<int>::iterator it1=sv1.end(),it2=sh1.end();
            it1--;
            it2--;
            long long ans1=*it1;
            ans1*=*it2;
            cout<<ans1<<endl;
        }
        return 0;
    }
  • 相关阅读:
    vijos 1066 弱弱的战壕 树状数组
    vijos 1057 盖房子 简单DP
    完全背包
    HDU 1203 和 HDU 2191
    dp 01背包,完全背包,多重背包 模板
    UVA11624 Fire!
    我们要学习的算法
    Find a way 两路广搜
    NYOJ 最小步数(简单深搜与广搜)
    HDU Dungeon Master广搜
  • 原文地址:https://www.cnblogs.com/NightRaven/p/9333256.html
Copyright © 2011-2022 走看看