<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      問題概述

      原題參考:C.Did We Get Everything Covered?
      給出n、k、m和一個字符串,要求判斷字符串是否可以包含前k個字母的長度為n的全排列,如果可以,輸出yes,如果不行,輸出no并給出反例

      Input:
      3
      2 2 4
      abba
      2 2 3
      abb
      3 3 10
      aabbccabab
      
      Output:
      YES
      NO
      aa
      NO
      cc
      

      看到這個輸出,不得不想夸cf一句,不拘小節,yes、YES、Yes之類的全都算對,其余oj平臺就emmm,看緣分了

      思路想法

      其實這個題是有一個簡單版本的,要求給出滿足n、k的最短字符串構造,由改題可知,最短字符串是n*k的,就是將前k個字符重復n遍,這個m顯然是沒有用的;由上面的一題可以得知,要想滿足題意中的字符串要求,就需要有n個完整包含前k個字符的區間,也就是說,這樣我們就可以從每個區間內選擇字符去構造任意排列。但是該題的難點在于如何輸出一個反例,我之后看了一些題解,也感覺有點模糊不清,琢磨了一陣子,大致可以這樣理解
      由第一題的提示我們可以大致將字符串分為n個區間,最極限的情況就是字符串的構建需要n個區間的字符,也就是無可替代的,但是對于反例我們是否直接輸出n*i即可,顯然是不行的,因為其他區間可以幫助他,也就是說,其他區間還有余力幫助不屬于該區間的任務,對于字符串aabbccabab就可以將其分為aabbc\cab\ab,假如我們要ccc,其實可以在第二個區間加上c變成aabbc\ccab\ab,這樣基本上是一樣的(不知道大家能不能get到我的點),那什么時候每個區間不能幫助其他區間呢,就是取末尾字符的時候,這時候假如再加,那么可能造成區間的移動,從而變得不是自己

      參考代碼

      #include <bits/stdc++.h>
      using namespace std;
      #define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
      #define endl '\n'
      #define pll pair<long long, long long>
      #define pii pair<int, int>
      #define vi vector<int>
      #define vl vector<long long>
      #define ll long long
      #define ull unsigned long long
      const ll INF = 9187201950435737471;
      const int inf = 2139062143;
      const ll mod = 1e9 + 7;
      const double eps = 1e-6;
      const double PI = acos(-1.0);
      int n, k, m, ktmp, nCnt = 0;
      bool sFind[27];
      string s, ans = "";
      void solve() {
          memset(sFind, 0, sizeof sFind);
          ktmp = 0, ans = "", nCnt = 0;
          cin >> n >> k >> m >> s;
          for(auto x:s) {
              if(!sFind[x-'a'+1]) {
                  ktmp ++;
                  sFind[x-'a'+1] = 1;
              }
              if(ktmp == k) {
                  nCnt ++;
                  ktmp = 0;
                  ans += x;
                  memset(sFind, 0, sizeof sFind);
              }
          }
          if(nCnt >= n) cout << "YES" << endl;
          else {
              cout << "NO" << endl;
              for(int i=1; i<=k; i++) {
                  if(!sFind[i]) {
                      ans += string(1, i+'a'-1);
                      break;
                  }
              }
              int i = ans.size();
              for(; i<n; i++) ans += "a";
              cout << ans << endl;
          }
      }
      int main() {
      #ifdef xrl
          freopen("in.txt", "r", stdin), freopen("out.txt", "w", stdout);
      #endif
          FAST_IO;
          int t = 1;
          cin >> t;
          while(t --) solve();
      #ifdef xrl
          cout << "Time used = " << (double)(clock() * 1.0 / CLOCKS_PER_SEC) << "s";
      #endif
          return 0;
      }
      

      問題反思

      這個題感覺我的理解還算是清楚的,所以寫出來記錄一手

      posted on 2024-02-02 21:51  山余木  閱讀(13)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 五寨县| 国产a在视频线精品视频下载| 亚洲精品毛片一区二区| 人人妻人人做人人爽| 久久无码中文字幕免费影院蜜桃| 激情综合色综合啪啪五月| 激情国产一区二区三区四区| 亚洲av第二区国产精品| 人人澡人摸人人添| 99久久国产成人免费网站| 国产麻豆精品一区一区三区| 国产高潮刺激叫喊视频| 久久精品免视看国产成人| 色综合色综合久久综合频道| 亚洲日韩中文字幕在线播放| 看亚洲黄色不在线网占| 亚洲另类无码一区二区三区| 亚洲精品乱码久久久久久不卡| 精品自拍偷拍一区二区三区| 日韩中文字幕高清有码| 亚洲乱色伦图片区小说| 国产短视频精品一区二区| 美女禁区a级全片免费观看| 精品亚洲国产成人av| 国产在线精品中文字幕| 国产精品国产三级国av | 中文字幕av高清片| 色综合久久综合香蕉色老大| 人人爽亚洲aⅴ人人爽av人人片| 中文字幕久久精品波多野结| XXXXXHD亚洲日本HD| 永仁县| a男人的天堂久久a毛片| 国产av第一次处破| 在线观看国产午夜福利片| 国产96在线 | 亚洲| av鲁丝一区鲁丝二区鲁丝三区| 日本一区二区三区专线| 国产精品永久免费无遮挡| 亚洲AV日韩AV高清在线观看| 夜夜添狠狠添高潮出水|