Codeforces 821C Okabe and Boxes(模拟)

题目大意:给你编号为1-n的箱子,放的顺序不定,有n条add指令将箱子放入栈中,有n条remove指令将箱子移除栈,移出去的顺序是从1-n的,至少需要对箱子重新排序几次。

解题思路:可以通过把栈清空表示已经排过序了,如果下一次remove时栈为空,说明已经排序过且没有新的箱子放入,因为题目确保在需要删除之前添加每个箱子,所以肯定栈顶的箱子是我们所需要的。如果栈不为空则判断栈顶箱子序号是否是我们需要的,不是则重新排序,用清空栈来表示。

这里用数字模拟了栈。

 1 #include<iostream>
 2 using namespace std;
 3
 4 const int N=3e5+5;
 5
 6 int a[N];
 7
 8 int main(){
 9     int n,len=0,pre=0,ans=0;
10     cin>>n;
11     for(int i=1;i<=n*2;i++){
12         char s[10];
13         cin>>s;
14         if(s[0]==‘a‘)
15             cin>>a[++len];
16         else{
17             if(len==0);
18             //清空栈
19             else if(a[len]==pre+1) len--;
20             else len=0,ans++;
21             pre++;
22         }
23     }
24     cout<<ans<<endl;
25 }
时间: 2024-08-07 17:00:09

Codeforces 821C Okabe and Boxes(模拟)的相关文章

Codeforces 821C Okabe and Boxes

题意: 给定一个n,然后有2n个指令,分别是add x, remove, add x 就是将x加入到栈中, remove 就是从栈顶移除, 然后移除的元素一定要有序, 不然就需要resort(重排)一次, 问最少需要重排多少次. 分析: 可以看出,每次只有栈顶元素和应该移除的元素不符合时候才需要重排, 所以重排后可以想象成栈中所有的元素都在他最佳的位置,那么我们就可以忽视掉这些重排后的元素, 把栈清空然后继续执行操作, 这样可以做到O(n)的复杂度. 另外如果栈顶元素正是需要移除的元素, 那么我

Codeforces 475C Kamal-ol-molk&#39;s Painting 模拟

题目链接:点击打开链接 题意:给定n*m的矩阵 X代表有色 .代表无色 用一个x*y的矩阵形刷子去涂色. 刷子每次可以→或↓移动任意步. 若能够染出给定的矩阵,则输出最小的刷子的面积 若不能输出-1 思路: 先找到连续最小的x,y 因为至少一个边界和x或y相等,所以枚举(x,i) 和 (i,y)就可以了. #pragma comment(linker, "/STACK:102400000,102400000") #include <stdio.h> #include <

Codeforces 30D King&#39;s Problem? 模拟

首先将n个点排序,找出排序后的K,然后分情况讨论. 当 k == n+1时,显然是 k->1->n || k->n->1这两种的较小值,因为三角形的两边之和大于第三边. 当1 <= k && k <= n 时: 1 , k -> 1 -> n+1 -> k+1 ->n  ||  k -> n -> n+1 -> k-1 -> 1,当k+1 || k-1 不存在时将对应步骤忽略. 2 , k - > 1

CodeForces 551C GukiZ hates Boxes

题目链接:CodeForces 551C GukiZ hates Boxes 解题思路: 题目要求最短时间,因此我们可以先考虑最长时间,最长时间一定是一个学生从开始走到结束,每走到一处就把该处箱子搬空,所以最长时间等于走到最后一个有箱子格子的步数ed加箱子总数sum. 接下来二分所需时间,直接搜索最短时间,每次都对假设时间进行判断.每次判断都从第一格开始,因为要搬空一个格子的箱子一定需要学生走到该处,同时所有学生可以同时移动,所以从头到尾判断要搬空该处需要多少学生,再与有的学生数量进行比较. 代

CF821 C. Okabe and Boxes 栈模拟

Link 题意:给出操作,如果当前出栈操作使得出栈序列非顺序,可以在此之前自由排序栈中所有数,问最少排几次. 思路:已经出栈到第x个元素时,每次需要排序的操作后,能够保证前x元素出栈有序,否则说明该操作序列根本无法做到有序出栈.所以碰到不合顺序的数,将栈中所有元素出栈一遍即可. /** @Date : 2017-07-04 15:21:52 * @FileName: C.cpp * @Platform: Windows * @Author : Lweleth ([email protected]

Codeforces 747C:Servers(模拟)

http://codeforces.com/problemset/problem/747/C 题意:有n台机器,q个操作.每次操作从ti时间开始,需要ki台机器,花费di的时间.每次选择机器从小到大开始,如果可以完成任务,那么输出id总和,否则输出-1. 思路:简单的模拟,注意如果不能完成任务,那么ser数组是不能更新的. 1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 #includ

CodeForces 670 A. Holidays(模拟)

Description On the planet Mars a year lasts exactly n days (there are no leap years on Mars). But Martians have the same weeks as earthlings — 5 work days and then 2 days off. Your task is to determine the minimum possible and the maximum possible nu

Codeforces 583 DIV2 Asphalting Roads 模拟

原题链接:http://codeforces.com/problemset/problem/583/A 题意: 很迷很迷,表示没看懂..但是你看样例就秒懂了 题解: 照着样例模拟就好 代码: #include<iostream> #include<cstring> #include<algorithm> #define MAX_N 55 using namespace std; bool h[MAX_N],v[MAX_N]; int n; int main(){ cin

Codeforces 821A Okabe and Future Gadget Laboratory 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://codeforces.com/problemset/problem/821/A 时间限制:2秒 空间限制:256M Okabe要改进他的实验室.实验室用一个n*n的正方形网格表示(n为正整数).他认为,一个“好实验室”的网格内每一个不等于1的数字都可以用同一行和同一列的某个数字之和表示.换句话说,对于任意x,y(1 ≤ x, y ≤ n 且 ax, y ≠ 1,),存在两个数s和t,使得ax, y =