51 nod 1255 字典序最小的子序列
2017-11-09 13:03
211 查看
思路:我用一个模拟数组记录ans。标记每个字母最后出现的位置,每次插入新字母便覆盖前面比其优先级低的字母。相当于模拟了栈。
#include <bits/stdc++.h> using namespace std; const int MAXN = 100005; bool vis[30]; char str[MAXN]; int ans[30],num[30]; int main() { scanf("%s" ,str); memset(vis, false, sizeof(vis)); memset(num,-1, sizeof(num)); int len=strlen(str); int index=0; for(int i=0;i<len;++i) { int x=str[i]-'a'; num[x]=i; } for(int i=0;i<len;++i) { int x=str[i]-'a'; if(!vis[x]) { vis[x]=true; while(ans[index-1]>x&&num[ans[index-1]]>i) { vis[ans[index-1]]=false; index--; } ans[index++]=x; } } for(int i=0;i<index;++i) printf("%c", ans[i]+'a'); cout<<endl; return 0; }
相关文章推荐
- 51 nod 1255 字典序最小的子序列
- 51 nod 1255 字典序最小的子序列(单调栈 贪心)
- 51NOD 1255 字典序最小的子序列 【贪心】
- 1255 字典序最小的子序列 (水题+技巧)
- 51nod 1255 字典序最小的子序列 贪心
- 51nod 1255 字典序最小的子序列 []【贪心】
- 51nod 1255 字典序最小的子序列(贪心)
- 51nod -1255 字典序最小的子序列(贪心)
- 51nod 1255 字典序最小的子序列 神奇的栈用法
- 51nod 1255 字典序最小的子序列【贪心】
- 51nod 1255 字典序最小的子序列
- 51nod 1255 字典序最小的子序列
- C - 字典序最小的子序列 51nod1255
- 【51Nod 1255】字典序最小的子序列
- 51nod 1255 字典序最小的子序列(贪心)
- 51nod-1255 字典序最小的子序列
- BZOJ1046 [HAOI2007]上升序列 【LIS + 字典序最小】
- (51nod)1283 - 最小周长
- CDOJ 251 导弹拦截 (LIS,一种找到字典序最小的最长上升子序列的方法)
- 51 nod 1065 最小正子段和 排序大法好