zoukankan      html  css  js  c++  java
  • 9.5——模拟赛

    悲催生活的开始

    T1 #6090. 「Codeforces Round #418」尘封思绪

    题目描述

    理由さえも 忘れてた 淚で
    哭泣的理由早已遗忘,泪水却依旧不止
    凍りついた 想い出は 綺麗で
    回忆早已冻结,但仍然美丽

    给定两个整数序列 aaa 和 bbb,其中 bbb 的长度等于 aaa 中 000 出现的次数。另外,任意一个非零元素在 aaa 与 bbb 中出现次数总和不超过 111。

    判断是否可以将 aaa 中为零的元素与 bbb 中的元素一一对应并替换,使得得到的序列 a′a'a​​ 不是一个递增序列。序列 a′a'a​​ 是递增序列当且仅当 ai′<ai+1′a'_i < a'_{i+1}ai​​<ai+1​​ 对所有有意义的 iii 成立。

    输入格式

    输入的第一行包含两个空格分隔的正整数 nnn、kkk —— 分别为序列 aaa 与 bbb 的长度。

    第二行包含 nnn 个空格分隔的整数 a1,a2,…,ana_1, a_2, ldots, a_na1​​,a2​​,,an​​ —— 包含恰好 kkk 个 000 的序列 aaa。

    第三行包含 kkk 个空格分隔的整数 b1,b2,…,bkb_1, b_2, ldots, b_kb1​​,b2​​,,bk​​ —— 用以替换 aaa 中为零元素的序列 bbb。

    输入保证任意一个非零元素在 aaa 与 bbb 中出现次数总和不超过 111。

    输出格式

    如果可以将 aaa 中等于零的元素与 bbb 中的元素一一对应并替换,使得得到的序列 a′a'a​​ 不是一个递增序列,输出 Yes;否则输出 No

    样例

    样例输入 1

    4 2
    11 0 0 14
    5 4

    样例输出 1

    Yes

    样例解释 1

    在样例 1 中,通过将两个 000 以任意方式替换,得到的序列 11,5,4,1411, 5, 4, 1411,5,4,14 和 11,4,5,1411, 4, 5, 1411,4,5,14 都不是递增序列,因此答案为 Yes

    样例输入 2

    6 1
    2 3 0 8 9 10
    5

    样例输出 2

    No

    样例解释 2

    在样例 2 中,惟一能得到的序列 2,3,5,8,9,102, 3, 5, 8, 9, 102,3,5,8,9,10 是递增序列,因此答案为 No

    样例输入 3

    4 1
    8 94 0 4
    89

    样例输出 3

    Yes

    样例输入 4

    7 7
    0 0 0 0 0 0 0
    1 2 3 4 5 6 7

    样例输出 4

    Yes

    数据范围与提示

    2≤n≤1002 leq n leq 1002n100,1≤k≤n1 leq k leq n1kn
    0≤ai≤2000 leq a_i leq 2000ai​​200
    1≤bi≤2001 leq b_i leq 2001bi​​200

    もう一度 もう二度と 云えない言葉は
    一次也好,两次也罢,将说不出口的话语
    幼いまま 優しいまま 悴んだ記憶
    以最初的状态、以最温柔的状态,存入冻结了的记忆
                      ——「木枯らしセンティメント」

    题解:把b从大的开始替换a中的0,这是最可能出现非递增的情况

     1 #include <algorithm>
     2 #include <cstdio>
     3 
     4 bool flag;
     5 int n,k,a[233],b[233];
     6 bool cmp(int a,int b)
     7 {
     8     return a>b;
     9 }
    10 
    11 inline void read(int &x)
    12 {
    13     x=0; register char ch=getchar();
    14     for(;ch>'9'||ch<'0';) ch=getchar();
    15     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    16 }
    17 
    18 int AC()
    19 {
    20     read(n),read(k);
    21     for(int i=1;i<=n;i++) read(a[i]);
    22     for(int i=1;i<=k;i++) read(b[i]);
    23     std::sort(b+1,b+k+1,cmp);
    24     for(int i=1,j=1;i<=n;i++)
    25         if(!a[i]) a[i]=b[j++];
    26     for(int i=2;i<=n;i++)
    27         if(a[i]-a[i-1]<=0)
    28         {
    29             flag=1;
    30             break;
    31         }
    32     if(flag) puts("Yes");
    33     else puts("No");
    34     return 0;
    35 }
    36 
    37 int Hope=AC();
    38 int main(){;} 
    AC Code

    T2 #6091. 「Codeforces Round #418」幻想特快

    题目描述

    もうそうがね ぼうそうする
    妄想变得天马行空
    ちょうとっきゅうに とびのって いま あいにいきたいの
    乘上超特快列车,现在就想去见你

    有一个 111 至 nnn 的所有整数形成的排列 p1,p2,…,pnp_1, p_2, ldots, p_np1​​,p2​​,,pn​​。

    有两个长度为 nnn 的数组 a1,a2,…,ana_1, a_2, ldots, a_na1​​,a2​​,,an​​ 和 b1,b2,…,bnb_1, b_2, ldots, b_nb1​​,b2​​,,bn​​。它们分别有恰好 n−1n - 1n1 个位置上的元素与 ppp 相同,即存在恰好一个 iii(1≤i≤n1 leq i leq n1in)使得 ai≠pia_i eq p_iai​​pi​​,存在恰好一个 jjj(1≤j≤n1 leq j leq n1jn)使得 bj≠pjb_j eq p_jbj​​pj​​。另外,aaa 与 bbb 不相同,即存在至少一个 iii(1≤i≤n1 leq i leq n1in)使得 ai≠bia_i eq b_iai​​bi​​。

    请给出任意一个满足条件的排列 ppp。输入保证这样的排列存在。

    输入格式

    输入的第一行包含一个正整数 nnn —— ppp、aaa 和 bbb 共同的长度。

    输入的第二行包含 nnn 个正整数 a1,a2,…,ana_1, a_2, ldots, a_na1​​,a2​​,,an​​ —— 第一个数组的元素。

    输入的第三行包含 nnn 个正整数 b1,b2,…,bnb_1, b_2, ldots, b_nb1​​,b2​​,,bn​​ —— 第二个数组的元素。存在至少一个 iii(1≤i≤n1 leq i leq n1in)使得 ai≠bia_i eq b_iai​​bi​​ 成立。

    输出格式

    输出一行,包含 nnn 个空格隔开的整数 p1,p2,…,pnp_1, p_2, ldots, p_np1​​,p2​​,,pn​​,表示一个满足条件的排列。如果有多解,输出任意一组即可。输入保证合法的排列存在。

    样例

    样例输入 1

    5
    1 2 3 4 3
    1 2 5 4 5

    样例输出 1

    1 2 5 4 3

    样例解释 1

    1,2,5,4,31, 2, 5, 4, 31,2,5,4,3 和 1,2,3,4,51, 2, 3, 4, 51,2,3,4,5 都是样例 1 的正确输出。

    样例输入 2

    5
    4 4 2 3 1
    5 4 5 3 1

    样例输出 2

    5 4 2 3 1

    样例解释 2

    5,4,2,3,15, 4, 2, 3, 15,4,2,3,1 是样例 2 的惟一解。

    样例输入 3

    4
    1 1 3 4
    1 4 3 4

    样例输出 3

    1 2 3 4

    数据范围与提示

    2≤n≤10002 leq n leq 1\,0002n1000
    1≤ai≤n1 leq a_i leq n1ai​​n,1≤bi≤n1 leq b_i leq n1bi​​n

    なにもしらない めをとじて
    闭上眼睛,什么也不知道
    かわいいままで ほしにねがった
    保持可爱的样子,向着星星许下愿望
                ——「もうそう❤えくすぷれす」

    题解:记录a b不同数值的位置,枚举没有出现过的数,

     1 #include <cstdio>
     2 
     3 const int N(2333);
     4 int n,k,t,a[N],b[N],p[N];
     5 int cant_use[N],pos[N],cant[N],flag;
     6 
     7 inline void read(int &x)
     8 {
     9     x=0; register char ch=getchar();
    10     for(;ch>'9'||ch<'0';) ch=getchar();
    11     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    12 }
    13 
    14 int AC()
    15 {
    16     read(n);
    17     for(int i=1;i<=n;i++) read(a[i]);
    18     for(int i=1;i<=n;i++)
    19     {
    20         read(b[i]);
    21         if(a[i]==b[i])
    22         {
    23             p[i]=a[i];
    24             cant_use[a[i]]=1;
    25             cant[a[i]]=1;
    26         }
    27         else pos[++k]=i;
    28     }
    29     if(k>1)
    30     {
    31         for(int i=1;i<=k;i++)
    32            for(int j=1;j<=n;j++)
    33             if(!cant_use[j]&&((a[pos[i]]!=j&&b[pos[i]]==j)||(a[pos[i]]==j&&b[pos[i]]!=j)))
    34             {
    35               p[pos[i]]=j,cant_use[j]=1;
    36               break;
    37             }
    38         for(int i=1;i<=n;i++) if(!p[i]) {flag=1;break;}
    39         if(flag)
    40         {
    41             for(int i=1;i<=k;i++)
    42                   for(int j=n;j>=1;j--)
    43                 if(!cant[j]&&((a[pos[i]]!=j&&b[pos[i]]==j)||(a[pos[i]]==j&&b[pos[i]]!=j)))
    44                 {
    45                   p[pos[i]]=j,cant[j]=1;
    46                   break;
    47                 }
    48         }
    49     }
    50     else
    51     {
    52         for(int i=1;i<=k;i++)
    53            for(int j=1;j<=n;j++)
    54             if(!cant_use[j]&&(a[pos[i]]!=j||b[pos[i]]!=j))
    55             {
    56               p[pos[i]]=j,cant_use[j]=1;
    57               break;
    58             }
    59         for(int i=1;i<=n;i++) if(!p[i]) {flag=1;break;}
    60         if(flag)
    61         {
    62             for(int i=1;i<=k;i++)
    63                   for(int j=n;j>=1;j--)
    64                 if(!cant[j]&&(a[pos[i]]!=j||b[pos[i]]!=j))
    65                 {
    66                   p[pos[i]]=j,cant[j]=1;
    67                   break;
    68                 }
    69         }
    70     }
    71     
    72     for(int i=1;i<=n;i++) printf("%d ",p[i]);
    73     return 0;
    74 }
    75 
    76 int Hope=AC();
    77 int main(){;}
    AC Code

    可能没人比这个还麻烦了。。

    T3 #6092. 「Codeforces Round #418」恋爱循环

    题目描述

    セーノ
    预备、起

    字符串 sss 对于字符 ccc 的权值,定义为 sss 中仅由 ccc 组成的最长连续子串的长度。例如,对于 s=kooomio,其由字符 o 组成的最长连续子串为 ooo,因此它对于字符 o 的权值为 333。

    给定由小写字母组成的字符串 sss 以及 qqq 个询问。每个询问形如 (mi,ci)(m_i, c_i)(mi​​,ci​​),表示「求出在 sss 中至多更改 mim_imi​​ 个位置的字符后所得的字符串 s′s's​​ 对于字符 cic_ici​​ 的最大权值」。

    输入格式

    输入的第一行包含一个正整数 nnn —— 字符串 sss 的长度。

    第二行包含 nnn 个小写英文字母组成的字符串 s1s2…sns_{1} s_2 ldots s_ns1​​s2​​sn​​ —— 给定的初始字符串。

    第三行包含一个正整数 qqq —— 询问的数目。

    接下来 qqq 行,每行包含一个正整数 mim_imi​​ —— 至多在 sss 中更改的字符数目,和以一个空格分隔的小写字母 mim_imi​​ —— 计算权值时使用的字符。

    输出格式

    输出 qqq 行:对于每个询问输出一行,包含一个整数 —— 进行更改后所得字符串 s′s's​​ 的最大权值。

    样例

    样例输入 1

    6
    koyomi
    3
    1 o
    4 o
    4 m

    样例输出 1

    3
    6
    5

    样例解释 1

    在样例 1 中,有三个询问:

    • 在第一个询问中,最多可以更改 sss 一个位置上的字符,将 y 所处的位置改为 o 得到 s=kooomi,权值为 333;
    • 在第二个询问中,最多可以更改 sss 四个位置上的字符,s=oooooo 的权值为 666;
    • 在第三个询问中,最多可以更改 sss 四个位置上的字符,s=mmmmmi 和 s=kmmmmm 的权值均为 555。

    样例输入 2

    15
    yamatonadeshiko
    10
    1 a
    2 a
    3 a
    4 a
    5 a
    1 b
    2 b
    3 b
    4 b
    5 b

    样例输出 2

    3
    4
    5
    7
    8
    1
    2
    3
    4
    5

    样例输入 3

    10
    aaaaaaaaaa
    2
    10 b
    10 z

    样例输出 3

    10
    10

    数据范围与提示

    1≤n≤15001 leq n leq 1\,5001n1500
    1≤q≤2000001 leq q leq 200\,0001q200000
    1≤mi≤n1 leq m_i leq n1mi​​n,cic_ici​​ 为小写英文字母

    コイスル キセツハ ヨクバリ サーキュレーション
    恋爱的季节是激情洋溢的循环
    コイスル キモチハ ヨクバリ サーキュレーション
    恋爱的心情是激情洋溢的循环
                ——「恋愛サーキュレーション」

     1 #include <cstring>
     2 #include <cstdio>
     3 
     4 const int N(1526);
     5 int n,m,ans,k;
     6 char s[N],r[N],x;
     7 bool vis[N];
     8 
     9 #define max(a,b) (a>b?a:b)
    10 inline void read(int &x)
    11 {
    12     x=0; register char ch=getchar();
    13     for(;ch>'9'||ch<'0';) ch=getchar();
    14     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    15 }
    16 
    17 int check(int pos)
    18 {
    19     int o=0;
    20     while(pos<=n)
    21     {
    22         if(r[pos]==x) ++o,++pos;
    23         else break;
    24     }
    25     ans=max(ans,o);
    26     return pos;
    27 }
    28 
    29 void dfs(int pos,int num)
    30 {
    31     if(num==k)
    32     {
    33         for(int i=1;i<=n;i++) i=check(i);
    34         return;
    35     }
    36     if(pos>n||n-pos+1<k-num) return;
    37     for(int i=pos;i<=n;i++)
    38     {
    39         if(vis[i]) continue;
    40         char u=r[i];
    41         if(r[i]!=x)
    42         {
    43             r[i]=x;
    44             dfs(i+1,num+1);
    45             r[i]=u;
    46         }
    47         if(i<n)dfs(i+1,num);
    48     }
    49     if(!num) vis[pos]=true;
    50     return;
    51 }
    52 
    53 int AC()
    54 {
    55     read(n);
    56     scanf("%s",s+1);
    57     for(int i=1;i<=n;i++) r[i]=s[i];
    58     read(m);
    59     for(int i=1;i<=m;i++)
    60     {
    61         read(k); scanf("%c",&x);
    62         memset(vis,false,sizeof vis);
    63         ans=0; dfs(1,0); check(1);
    64         printf("%d
    ",ans);
    65     }
    66     return 0;
    67 }
    68 
    69 int Hope=AC();
    70 int main(){;}
    TLE 的 19分暴力

     题解:二分最大的字串长度,处理每个字母在[1,i]的出现次数 枚举最大长度的子串的位置。

     1 #include <cstdio>
     2 #include <map>
     3 
     4 const int N(1526);
     5 int n,f[27][N],a[N];
     6 std::map<char,bool>ma;
     7 char s[N];
     8 
     9 inline void read(int &x)
    10 {
    11     x=0; register char ch=getchar();
    12     for(;ch>'9'||ch<'0';) ch=getchar();
    13     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    14 }
    15 
    16 #define max(a,b) (a>b?a:b)
    17 #define min(a,b) (a<b?a:b)
    18 
    19 int l,r,mid,cnt,ans;
    20 bool check(int num,char zm,int len)
    21 {
    22     int nowlen=0,cnt=0;
    23     int zmth=zm-'a';
    24     for(int i=1;i<=n-len+1;i++)
    25         if(f[zmth][i+len-1]-f[zmth][i-1]>=len-num) return true;
    26     return false;
    27 }
    28 
    29 int AC()
    30 {
    31     read(n); scanf("%s",s+1);
    32     for(int i=1;i<=n;i++)
    33       for(int j=0;j<26;j++)
    34       {
    35         f[j][i]+=f[j][i-1];
    36           if(s[i]-'a'==j) f[j][i]++;
    37       }
    38     int q,x; read(q);
    39     for(char ch[2];q--;)
    40     {
    41         read(x); scanf("%s",ch);
    42         for(l=0,r=n+1;l<=r;)
    43         {
    44             mid=l+r>>1;
    45             if(check(x,ch[0],mid))
    46             {
    47                 ans=mid;
    48                 l=mid+1;
    49             }
    50             else r=mid-1;
    51         }
    52         printf("%d
    ",ans);
    53     }
    54     return 0;
    55 }
    56 
    57 int Hope=AC();
    58 int main(){;}
    View Code
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    类的静态成员
    ActionController::InvalidAuthenticityToken 解决办法
    Ruby的动态特性
    (转)右下角弹出消息框
    使用 Visual C++ 2008 功能包加强 Windows 应用程序
    Ajax以responseXML返回,客户端(IE)不能分析xml问题
    css的精髓是布局,而不是样式——之二
    字符编码的一些内容
    2009年好运!牛年要牛起来
    OpenLayers介绍
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7477935.html
Copyright © 2011-2022 走看看