HDU4699-杭电多校第十场1004
来源:互联网 发布:java中的properties类 编辑:程序博客网 时间:2024/06/07 11:54
题目:题目链接
题意:
就是给你五个操作,分别实现这些操作:
主要的就是对于Q操作,我们需要输出对应的前K的数字中和最大的那个和,sum(i) = a1+a2+....ai;
对于当前光标位置,我们使用两个栈A和B来存储光标前面的数据,用B来存储光标后面的数据。这样就很容易能够
实现前四个操作。对于Q操作,我们需要用一个数组来维护,对应的求第I个位置的MAX值,最后直接输出MAX[k]就可以
了:
唉,没有考虑栈为空的情况,WA了好几次,加一个特判就可以了:
#include <iostream>#include <cstdio>#include <string>#include <string.h>#include <map>#include <vector>#include <cstdlib>#include <algorithm>#include <cmath>#include <queue>#include <set>#include <stack>#include <functional>#include <fstream>#include <sstream>#include <iomanip>#include <numeric>#include <cassert>#include <bitset>#include <stack>#include <ctime>#include <list>#define INF 0x7fffffff#define max3(a,b,c) (max(a,b)>c?max(a,b):c)#define min3(a,b,c) (min(a,b)<c?min(a,b):c)#define mem(a,b) memset(a,b,sizeof(a))__int64 inf=-100000000;using namespace std;int gcd(int n,int m){ if(n<m) swap(n,m); return n%m==0?m:gcd(m,n%m);}int lcm(int n,int m){ if(n<m) swap(n,m); return n/gcd(n,m)*m;}#define N 1000008int prime[N];struct node{ int x, y;};bool cmp(const node & a, const node & b){ return a.x > b.x;}void getPrime();void bash();void wzf();void SG();int QuickMod(int a, int b, int n);char O;int num;int t;stack<int>A;stack<int>B;int cnt;int sum[N];int MAX[N];void add(int num){ cnt++; if(!A.empty()) { A.push(num); sum[cnt] = sum[cnt-1] + num; if(sum[cnt] > MAX[cnt-1]) MAX[cnt] = sum[cnt]; else MAX[cnt] = MAX[cnt-1]; } else { A.push(num); sum[cnt] = num; MAX[cnt] =num; }}void del(){ if(!A.empty()) { A.pop(); cnt--; }}void left(){ if(!A.empty()) { int tp = A.top(); A.pop(); B.push(tp); cnt--; }}void right(){ if(!B.empty()) { int tp = B.top(); B.pop(); if(!A.empty()) { A.push(tp); cnt++; sum[cnt] = sum[cnt-1] + tp; if(sum[cnt] > MAX[cnt-1]) MAX[cnt] = sum[cnt]; else MAX[cnt] = MAX[cnt-1]; } else { A.push(tp); cnt++; sum[cnt]=tp; MAX[cnt]=tp; } }}void que(int num){ printf("%d\n", MAX[num]);}int main(){ char O[3]; while(scanf("%d", &t) == 1) { while(!A.empty()) A.pop(); while(!B.empty()) B.pop(); mem(sum, 0); cnt = 0; for(int i = 0; i < t; ++i) { scanf("%s", O); switch(O[0]) { case 'I': scanf("%d", &num); add(num); break; case 'D': del(); break; case 'L': left(); break; case 'R': right(); break; case 'Q': scanf("%d", &num); que(num); break; default: break; } } } return 0;}int QuickMod(int a,int b,int n){ int r = 1; while(b) { if(b&1) r = (r*a)%n; a = (a*a)%n; b >>= 1; } return r;}void getPrime(){ memset(prime, 0, sizeof(prime)); prime[0] = 1; prime[1] = 1; for(int i = 2; i < N; ++i) { if(prime[i] == 0) { for(int j = i+i; j < N; j+=i) prime[j] = 1; } }}void bash(int n, int m){ if(n%(m+1) != 0) printf("1\n"); else printf("0\n");}void wzf(int n, int m){ if(n > m) swap(n, m); int k = m-n; int a = (k * (1.0 + sqrt(5.0))/2.0); if(a == n) printf("0\n"); else printf("1\n");}
- HDU4699-杭电多校第十场1004
- HDU4705-杭电多校第十场1010
- HDU4696-杭电多校第十场1001
- HDU4701-杭电多校第十场1006-博弈
- HDU4704-杭电多校第十场1009签到
- 多校第十场
- hdu6180Schedule(第十场贪心)
- hdu4699(堆+模拟)
- hdu4699 Editor(数据结构+思路)
- 多校比赛第十场
- 多校联赛第十场
- Multi-university 第十场 经验总结
- 请原谅我一生读题不仔细~仅以此纪念多校第十场1004
- acm个人赛第十场成绩
- hdu 4705 Y 多校第十场
- hdu 4704 Sum 多校第十场
- hdu 4696 Answers 多校第十场
- hdu 4705 Y(多校赛第十场)
- java.sql.SQLException: Connection has already been created in this tx context for pool named ...
- Linux2.6内核--内存管理(1)--分页机制
- css之float飘起来
- Race to 1 Again
- 浪潮之巅
- HDU4699-杭电多校第十场1004
- 人人都爱经济学(王福重)
- POJ2352_stars_solution
- 庞果网--不可表示的数
- 黑马程序员 Java基础(1)
- 使用基于Exchange 的powershell 代码Exchange 2010 Ps 整合message tracking 功能!
- linux内核中的一些关于中断的宏定义
- POJ 3349 Snowflake Snow Snowflakes(哈希表)
- 程序员的困境