FOJ Problem 2260 Card Game
Accept: 37 Submit: 117
Time Limit: 3000 mSec Memory Limit : 32768
KB
Problem Description
有如下取牌游戏:
1. 桌面上有n张卡牌从左到右排成一行,每张卡牌上有一个数字;
2. 游戏按轮次进行,每一轮中取掉所有比左边数值小的卡牌;
3. 当无牌可取的时候则游戏结束。
比如初始卡牌为{5, 6, 3, 7, 4, 1, 2},共需2轮取牌。取牌过程如下(小括号为每轮取掉的牌):
{5, 6, 3, 7, 4, 1, 2}
==> {5, 6, (3), 7, (4), (1), 2}
==> {5, 6, 7, 2}
==> {5, 6, 7, (2)}
==> {5, 6, 7}
现按顺序给定初始的卡牌数字,请求出游戏结束时取牌的总轮次,并输出结束时桌上剩余的卡牌序列。
Input
包含多组测试数据。
输入包含两行。
第一行包含一个整数n表示卡牌的数量。
第二行包含n个空格隔开的整数,表示排成一行的卡牌上对应的数字(取值范围[1,1000000000])。
n≤1000000
Output
输出包含两行。
第一行包含一个整数表示游戏的取牌总轮次。
第二行包含游戏结束时桌上剩余的卡牌序列,用空格隔开。
Sample Input
Sample Output
1:栈中只剩栈顶元素的情况,此时栈顶元素的下面已经没有元素了,因此已经无法被消除,则一定会出现在最终的卡牌序列中,将之抛出栈中并记录,再将当前元素放入堆中;
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<string>
#include<stack>
using namespace std;
#define INF 0x3f3f3f3f
const int N_MAX = +;
int a[N_MAX],n;
stack<int>s;
int dp[N_MAX];
vector<int>res;
int main() {
while (scanf("%d",&n)!=EOF) {
memset(dp, , sizeof(dp));
res.clear();
int term = ;
for (int i = ; i < n; i++)
scanf("%d", &a[i]);
for (int i = ; i < n;i++) {
while (!s.empty() && a[i] >= a[s.top()]) {
if (s.size() == ) {
res.push_back(a[s.top()]);
s.pop();
}
else {
dp[i] = max(dp[i],dp[s.top()]+);
term = max(term,dp[i]);
s.pop();
}
}
s.push(i);
} while (!s.empty()) {
if (s.size() == ) {
res.push_back(a[s.top()]);
s.pop();
}
else {
term = max(term, dp[s.top()] + );
s.pop();
}
}
printf("%d\n",term);
for (vector<int>::iterator it = res.begin(); it != res.end();it++) {
if (it + != res.end())cout << *it << " ";
else cout << *it << endl;
}
} return ;
}
FOJ Problem 2260 Card Game的更多相关文章
- FOJ ——Problem 1759 Super A^B mod C
Problem 1759 Super A^B mod C Accept: 1368 Submit: 4639Time Limit: 1000 mSec Memory Limit : 32 ...
- FOJ Problem 1016 无归之室
Problem 1016 无归之室 Accept: 926 Submit: 7502Time Limit: 1000 mSec Memory Limit : 32768 KB Prob ...
- FOJ Problem 1015 土地划分
Problem 1015 土地划分 Accept: 823 Submit: 1956Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- foj Problem 2107 Hua Rong Dao
Problem 2107 Hua Rong Dao Accept: 503 Submit: 1054Time Limit: 1000 mSec Memory Limit : 32768 K ...
- foj Problem 2282 Wand
Problem 2282 Wand Accept: 432 Submit: 1537Time Limit: 1000 mSec Memory Limit : 262144 KB Prob ...
- FOJ Problem 2273 Triangles
Problem 2273 Triangles Accept: 201 Submit: 661Time Limit: 1000 mSec Memory Limit : 262144 KB P ...
- foj Problem 2275 Game
Problem D Game Accept: 145 Submit: 844Time Limit: 1000 mSec Memory Limit : 262144 KB Problem D ...
- foj Problem 2283 Tic-Tac-Toe
Prob ...
- FOJ Problem 2257 Saya的小熊饼干
...
随机推荐
- StatementHandler-Mybatis源码系列
内容更新github地址:我飞 StatementHandler接口 StatementHandler封装了Mybatis连接数据库操作最基础的部分.因为,无论怎么封装,最终我们都是要使用JDBC和数 ...
- Java写诗程序
import java.util.Random; public class test_word { public static void main(String[] args) { System.ou ...
- Codeforces Round 513 (Div.1+Div.2)
比赛传送门 10月4号的比赛,因为各种原因(主要是懒),今天才写总结-- Div1+Div2,只做出两个题+迟到\(20min\),日常掉\(rating\)-- \(\rm{A.Phone\;Num ...
- 音频框架TheAmazingAudioEngine实现音效
TheAmazingAudioEngine是Michael Tyson开源的iOS第三方音频框架.很多音频类APP应用这个框架作开发. 应用这个框架,可以比较方便地实现iOS音频开发中的各种音效的实现 ...
- LEETCODE60——第K个排列
class Solution { public: string getPermutation(int n, int k) { '); vector<bool> flag(n, false) ...
- pandas交叉表和透视表及案例分析
一.交叉表: 作用: 交叉表是一种用于计算分组频率的特殊透视图,对数据进行汇总 考察预测数据和正式数据的对比情况,一个作为行,一个作为列 案例: 医院预测病人病情: 真实病情如下数组(B:有病,M:没 ...
- MySQL左右连接查询中的NULL的数据筛选问题
这里使用左连接为例子,对于左连接是将左边表的数据显示,右边表中如果没有对应的数据则使用null填充. game表: game_type表: SELECT g.name,g.type_id,t.type ...
- C++图书馆管理系统项目中部分功能代码实现(书籍推荐)
bool UserServiceImpl::Compare1(Book b1,Book b2)//按照借阅次数比较{ if(b1.GetCnt() > b2.GetCnt()) { return ...
- Python学习笔记:PyInstaller(exe程序打包)
PyInstaller可以将Python程序打包成一个exe程序来独立运行,用户使用时只需要执行这个exe文件即可,不需要在机器上再安装Python及其他包就可运行了.另外,PyInstaller相较 ...
- graph-Dijkstra's shortest-path alogorithm
直接贴代码吧,简明易懂. 后面自己写了测试,输入数据为: a b c d e 0 1 4 0 2 2 1 2 3 1 3 2 1 4 3 2 1 1 2 3 4 2 4 5 4 3 1 也就是课本上1 ...