zoukankan      html  css  js  c++  java
  • [CF777D] Cloud of Hashtags(贪心,二分)

    题目链接:http://codeforces.com/contest/777/problem/D

    题意:n个字符串,保留前缀。希望保留尽可能多的字符,使得字典序单增。

    把n个字符串翻转过来,相当于字典序递减。比较相邻两个字符串的字典序大小,用二分将当前字符串截至恰好比上一个字符串字典序小,且最长即可。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 500500;
     5 int n;
     6 string a[maxn], b[maxn];
     7 
     8 signed main() {
     9     // freopen("in", "r", stdin);
    10     while(~scanf("%d", &n)) {
    11         for(int i = n; i >= 1; i--) cin >> a[i];
    12         b[1] = a[1];
    13         for(int i = 2; i <= n; i++) {
    14             if(a[i] <= b[i-1]) {
    15                 b[i] = a[i];
    16                 continue;
    17             }
    18             int lo = 0, hi = a[i].length();
    19             string ret;
    20             while(lo <= hi) {
    21                 int mid = (lo + hi) >> 1;
    22                 if(a[i].substr(0, mid) <= b[i-1]) {
    23                     ret = a[i].substr(0, mid);
    24                     lo = mid + 1;
    25                 }
    26                 else hi = mid - 1;
    27             }
    28             b[i] = ret;
    29         }
    30         for(int i = n; i >= 1; i--) cout << b[i] << endl;
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    c#获取指定时区的日期
    项目版本管理
    iis部署网站
    浏览器测试string是否为图片
    网站中挂视频
    百度地图调用
    mvc actionresult返回各种文件
    Coursera机器学习week7 单元测试
    Coursera机器学习week7 笔记
    牛客练习赛12 AB
  • 原文地址:https://www.cnblogs.com/kirai/p/7252514.html
Copyright © 2011-2022 走看看