codeforces 527C Glass Carving
2016-07-17 21:41
323 查看
传送门:http://codeforces.com/problemset/problem/527/C
题目大意:你有一块玻璃,你可以横切(H)或者竖切(V),问你在每一步的时候这块玻璃上最小的那一块是什么。
解题思路:
你需要set以及mutiset来维护长度以及切的地方,然后暴力(手动滑稽)。
ac程序
题目大意:你有一块玻璃,你可以横切(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; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储
- C语言中计算正弦的相关函数总结