• bzoj4839 [Neerc2016]Abbreviation


    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4839

    【题解】

    pkusc怎么出bzoj原题啊

    字符串随便处理一下就行了,大模拟

    pkusc:2A(freopen调试没删)

    线下:2A(数组不够大)

    # include <stdio.h>
    # include <string.h>
    # include <iostream>
    # include <algorithm>
    // # include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    const int M = 5e5 + 10;
    const int mod = 1e9+7;
    
    # define RG register
    # define ST static
    
    char str[1010]; 
    
    char s[1010][1010];
    int sn = 0; 
    char t[1010];
    char ans[6010]; 
    int tn = 0, n = 0; 
    
    inline bool isok(int i) {
        if(!isupper(s[i][0])) return 0; 
        int len = strlen(s[i]); 
        if(len == 1) return 0; 
        for (int j=1; j<len; ++j)
            if(!islower(s[i][j])) return 0;
        return 1;
    }
    
    inline bool isBlank(int i) {
        int len = strlen(s[i]);
        if(len != 1) return 0;
        return s[i][0] == ' ';
    }
            
    
    int main() {
    //    freopen("bzoj4839.in", "r", stdin); 
        while(cin.getline(str, 1000)) {
            int len = strlen(str);
            sn = 0;
            for (int i=0; i<len; ++i) {
                if(isupper(str[i]) || islower(str[i])) {
                    tn = 0;
                    int j = i;
                    while(isupper(str[j]) || islower(str[j])) {
                        t[tn++] = str[j];
                        ++j; 
                    }
                    ++sn;
                    for (int j=0; j<tn; ++j)
                        s[sn][j] = t[j];
                    s[sn][tn] = 0; 
                    i = j-1;
                } else {
                    ++sn; s[sn][0] = str[i];     
                    s[sn][1] = 0; 
                }
            }
    //        for (int i=1; i<=sn; ++i) printf("%s==
    ", s[i]); 
            n = 0;
            for (int i=1; i<=sn; ++i) {
                if(!isok(i)) {
                    for (int j=0; s[i][j]; ++j)
                        ans[n++] = s[i][j];    
                } else {
                    int j = i;
                    while(j+2 <= sn && isBlank(j+1) && isok(j+2)) j += 2;
                    if(j == i) {
                        for (int k=0; s[i][k]; ++k)
                            ans[n++] = s[i][k];    
                    } else {
                         for (int k=i; k<=j; k+=2)
                             ans[n++] = s[k][0];
                        ans[n++] = ' ';
                        ans[n++] = '(';
                        for (int k=i; k<=j; k++)
                            for (int l=0; s[k][l]; ++l)
                                ans[n++] = s[k][l];
                        ans[n++] = ')'; 
                        i = j;
                    }
                }
            }
            ans[n] = 0; 
            printf("%s
    ", ans); 
        }
        return 0;
    }
    View Code
  • 相关阅读:
    luogu P2639 [USACO09OCT]Bessie的体重问题Bessie's We…
    1001. 害死人不偿命的(3n+1)猜想 (15)
    1003. 我要通过!(20)
    1002. 写出这个数 (20)
    《C语言程序设计(第四版)》阅读心得(一)
    1006. 换个格式输出整数 (15)
    背包问题之多重背包
    背包问题之完全背包
    背包问题之0-1背包
    动态规划例题
  • 原文地址:https://www.cnblogs.com/galaxies/p/bzoj4839.html
Copyright © 2020-2023  润新知