zoukankan      html  css  js  c++  java
  • 牛客 安徽大学新生赛 G

                传送门::https://ac.nowcoder.com/acm/contest/2720/G

    题意::构造一个字符串 (串长  <=1e9 ) 当且仅包含 n个  “ AHUICPC ”  子序列 且字符串长度 <=1e5

      思路::

    当你在串 ("UICPC")最前面 每添加1个”AH“,总共会构成  ( i +1 ) * i / 2 个子序列 ,这样就是可以构造最优解,使串尽量最短 ;

    当然为啥是构造长度为2的最优了,同样的道理 当构造长度为3 的时候,虽然可以构造出那麽多子序列,但是长度会炸;

    举个例子 “AHAHAHAH   UICPC” 你会发现 子序列下总和  4 + 3 + 2 +1 =10 (等差求和)

    因此我们首先要找出最大的  i   满足  ( i + 1 ) * i /2 < n ,然后对于多出的部分 k 我们是不是可以 找到一个位置(也就是构造的第 k 个“AH”位置前加上一个“A”) 满足 用它为起始位置刚好构造出 k 个子序列,显然只花费了 一个 单位长度

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int n;
     8     scanf("%d",&n);
     9     if(n==1){
    10         printf("AHUICPC");return 0;
    11     }
    12     int k;
    13     for(int i=1;;i++){
    14         if((ll)(i+1)*i/2<(ll)n){
    15             k=i;
    16         }
    17         else{
    18             break;
    19         }
    20     }
    21     int t=(n-(k+1)*k/2);
    22     for(int i=1;i<=t;i++){
    23         if(i==t-k+1){
    24             printf("AAH");
    25         }
    26         else{
    27             printf("AH");
    28         }
    29     }
    30     printf("UICPC");
    31     return 0;
    32 }

     不足之处请指出!!!

    纵使单枪匹马,也要勇闯天涯
  • 相关阅读:
    测试模式 windows2008 内部版本7601
    移动端UC /QQ 浏览器的部分私有Meta 属性
    正则表达式 正向预查 负向预查
    获取指定元素的某一个样式属性值
    把普通对象转换成json格式的对象
    求平均数-----类数组转换成数组
    轮播图
    倒计时
    JS 预解释相关理解
    ul ol di三者区别
  • 原文地址:https://www.cnblogs.com/sj-gank/p/11972620.html
Copyright © 2011-2022 走看看