9.5——模拟赛

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9.5——模拟赛相关的知识,希望对你有一定的参考价值。

悲催生活的开始

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

题目描述

技术分享
 1 题目描述
 2 理由さえも 忘れてた 淚で
 3 哭泣的理由早已遗忘,泪水却依旧不止
 4 凍りついた 想い出は 綺麗で
 5 回忆早已冻结,但仍然美丽
 6 给定两个整数序列 aaa 和 bbb,其中 bbb 的长度等于 aaa 中 000 出现的次数。另外,任意一个非零元素在 aaa 与 bbb 中出现次数总和不超过 111 7 
 8 判断是否可以将 aaa 中为零的元素与 bbb 中的元素一一对应并替换,使得得到的序列 a′aa
 9 ?′
10 ??  不是一个递增序列。序列 a′aa
11 ?′
12 ??  是递增序列当且仅当 ai′<ai+1′a_i < a_{i+1}a
13 ?i
14 ?′
15 ?? <a
16 ?i+1
17 ?′
18 ??  对所有有意义的 iii 成立。
19 输入格式
20 输入的第一行包含两个空格分隔的正整数 nnn、kkk —— 分别为序列 aaa 与 bbb 的长度。
21 
22 第二行包含 nnn 个空格分隔的整数 a1,a2,…,ana_1, a_2, \ldots, a_na
23 ?1
24 ?? ,a
25 ?2
26 ?? ,…,a
27 ?n
28 ??  —— 包含恰好 kkk 个 000 的序列 aaa。
29 
30 第三行包含 kkk 个空格分隔的整数 b1,b2,…,bkb_1, b_2, \ldots, b_kb
31 ?1
32 ?? ,b
33 ?2
34 ?? ,…,b
35 ?k
36 ??  —— 用以替换 aaa 中为零元素的序列 bbb。
37 
38 输入保证任意一个非零元素在 aaa 与 bbb 中出现次数总和不超过 11139 输出格式
40 如果可以将 aaa 中等于零的元素与 bbb 中的元素一一对应并替换,使得得到的序列 a′aa
41 ?′
42 ??  不是一个递增序列,输出 Yes;否则输出 No。
43 样例
44 样例输入 1
45 
46 4 2
47 11 0 0 14
48 5 4
49 样例输出 1
50 
51 Yes
52 样例解释 1
53 
54 在样例 1 中,通过将两个 000 以任意方式替换,得到的序列 11,5,4,1411, 5, 4, 1411,5,4,1411,4,5,1411, 4, 5, 1411,4,5,14 都不是递增序列,因此答案为 Yes。
55 
56 样例输入 2
57 
58 6 1
59 2 3 0 8 9 10
60 5
61 样例输出 2
62 
63 No
64 样例解释 2
65 
66 在样例 2 中,惟一能得到的序列 2,3,5,8,9,102, 3, 5, 8, 9, 102,3,5,8,9,10 是递增序列,因此答案为 No。
67 
68 样例输入 3
69 
70 4 1
71 8 94 0 4
72 89
73 样例输出 3
74 
75 Yes
76 样例输入 4
77 
78 7 7
79 0 0 0 0 0 0 0
80 1 2 3 4 5 6 7
81 样例输出 4
82 
83 Yes
84 数据范围与提示
85 2≤n≤1002 \leq n \leq 1002≤n≤1001≤k≤n1 \leq k \leq n1≤k≤n
86 0≤ai≤2000 \leq a_i \leq 2000≤a
87 ?i
88 ?? ≤200
89 1≤bi≤2001 \leq b_i \leq 2001≤b
90 ?i
91 ?? ≤200
92 
93 もう一度 もう二度と 云えない言葉は
94 一次也好,两次也罢,将说不出口的话语
95 幼いまま 優しいまま 悴んだ記憶
96 以最初的状态、以最温柔的状态,存入冻结了的记忆
97                   ——「木枯らしセンティメント」
题面

 

题解:把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」幻想特快

题目描述

技术分享
  1 题目描述
  2 もうそうがね ぼうそうする
  3 妄想变得天马行空
  4 ちょうとっきゅうに とびのって いま あいにいきたいの
  5 乘上超特快列车,现在就想去见你
  6 有一个 111 至 nnn 的所有整数形成的排列 p1,p2,…,pnp_1, p_2, \ldots, p_np
  7 ?1
  8 ?? ,p
  9 ?2
 10 ?? ,…,p
 11 ?n
 12 ?? 。
 13 
 14 有两个长度为 nnn 的数组 a1,a2,…,ana_1, a_2, \ldots, a_na
 15 ?1
 16 ?? ,a
 17 ?2
 18 ?? ,…,a
 19 ?n
 20 ??  和 b1,b2,…,bnb_1, b_2, \ldots, b_nb
 21 ?1
 22 ?? ,b
 23 ?2
 24 ?? ,…,b
 25 ?n
 26 ?? 。它们分别有恰好 n−1n - 1n−1 个位置上的元素与 ppp 相同,即存在恰好一个 iii(1≤i≤n1 \leq i \leq n1≤i≤n)使得 ai≠pia_i \neq p_ia
 27 ?i
 28 ?? ≠p
 29 ?i
 30 ?? ,存在恰好一个 jjj(1≤j≤n1 \leq j \leq n1≤j≤n)使得 bj≠pjb_j \neq p_jb
 31 ?j
 32 ?? ≠p
 33 ?j
 34 ?? 。另外,aaa 与 bbb 不相同,即存在至少一个 iii(1≤i≤n1 \leq i \leq n1≤i≤n)使得 ai≠bia_i \neq b_ia
 35 ?i
 36 ?? ≠b
 37 ?i
 38 ?? 。
 39 
 40 请给出任意一个满足条件的排列 ppp。输入保证这样的排列存在。
 41 输入格式
 42 输入的第一行包含一个正整数 nnn —— ppp、aaa 和 bbb 共同的长度。
 43 
 44 输入的第二行包含 nnn 个正整数 a1,a2,…,ana_1, a_2, \ldots, a_na
 45 ?1
 46 ?? ,a
 47 ?2
 48 ?? ,…,a
 49 ?n
 50 ??  —— 第一个数组的元素。
 51 
 52 输入的第三行包含 nnn 个正整数 b1,b2,…,bnb_1, b_2, \ldots, b_nb
 53 ?1
 54 ?? ,b
 55 ?2
 56 ?? ,…,b
 57 ?n
 58 ??  —— 第二个数组的元素。存在至少一个 iii(1≤i≤n1 \leq i \leq n1≤i≤n)使得 ai≠bia_i \neq b_ia
 59 ?i
 60 ?? ≠b
 61 ?i
 62 ??  成立。
 63 输出格式
 64 输出一行,包含 nnn 个空格隔开的整数 p1,p2,…,pnp_1, p_2, \ldots, p_np
 65 ?1
 66 ?? ,p
 67 ?2
 68 ?? ,…,p
 69 ?n
 70 ?? ,表示一个满足条件的排列。如果有多解,输出任意一组即可。输入保证合法的排列存在。
 71 样例
 72 样例输入 1
 73 
 74 5
 75 1 2 3 4 3
 76 1 2 5 4 5
 77 样例输出 1
 78 
 79 1 2 5 4 3
 80 样例解释 1
 81 
 82 1,2,5,4,31, 2, 5, 4, 31,2,5,4,31,2,3,4,51, 2, 3, 4, 51,2,3,4,5 都是样例 1 的正确输出。
 83 
 84 样例输入 2
 85 
 86 5
 87 4 4 2 3 1
 88 5 4 5 3 1
 89 样例输出 2
 90 
 91 5 4 2 3 1
 92 样例解释 2
 93 
 94 5,4,2,3,15, 4, 2, 3, 15,4,2,3,1 是样例 2 的惟一解。
 95 
 96 样例输入 3
 97 
 98 4
 99 1 1 3 4
100 1 4 3 4
101 样例输出 3
102 
103 1 2 3 4
104 数据范围与提示
105 2≤n≤10002 \leq n \leq 1\,0002≤n≤1000
106 1≤ai≤n1 \leq a_i \leq n1≤a
107 ?i
108 ?? ≤n,1≤bi≤n1 \leq b_i \leq n1≤b
109 ?i
110 ?? ≤n
111 
112 なにもしらない めをとじて
113 闭上眼睛,什么也不知道
114 かわいいままで ほしにねがった
115 保持可爱的样子,向着星星许下愿望
116             ——「もうそう?えくすぷれす」
题面

 

题解:记录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」恋爱循环

题目描述

技术分享
  1 题目描述
  2 セーノ
  3 预备、起
  4 字符串 sss 对于字符 ccc 的权值,定义为 sss 中仅由 ccc 组成的最长连续子串的长度。例如,对于 
  5 s
  6 =
  7 kooomio
  8 ,其由字符 
  9 o
 10  组成的最长连续子串为 
 11 ooo
 12 ,因此它对于字符 
 13 o
 14  的权值为 333 15 
 16 给定由小写字母组成的字符串 sss 以及 qqq 个询问。每个询问形如 (mi,ci)(m_i, c_i)(m
 17 ?i
 18 ?? ,c
 19 ?i
 20 ?? ),表示「求出在 sss 中至多更改 mim_im
 21 ?i
 22 ??  个位置的字符后所得的字符串 s′ss
 23 ?′
 24 ??  对于字符 cic_ic
 25 ?i
 26 ??  的最大权值」。
 27 输入格式
 28 输入的第一行包含一个正整数 nnn —— 字符串 sss 的长度。
 29 
 30 第二行包含 nnn 个小写英文字母组成的字符串 s1s2…sns_{1} s_2 \ldots s_ns
 31 ?1
 32 ?? s
 33 ?2
 34 ?? …s
 35 ?n
 36 ??  —— 给定的初始字符串。
 37 
 38 第三行包含一个正整数 qqq —— 询问的数目。
 39 
 40 接下来 qqq 行,每行包含一个正整数 mim_im
 41 ?i
 42 ??  —— 至多在 sss 中更改的字符数目,和以一个空格分隔的小写字母 mim_im
 43 ?i
 44 ??  —— 计算权值时使用的字符。
 45 输出格式
 46 输出 qqq 行:对于每个询问输出一行,包含一个整数 —— 进行更改后所得字符串 s′ss
 47 ?′
 48 ??  的最大权值。
 49 样例
 50 样例输入 1
 51 
 52 6
 53 koyomi
 54 3
 55 1 o
 56 4 o
 57 4 m
 58 样例输出 1
 59 
 60 3
 61 6
 62 5
 63 样例解释 1
 64 
 65 在样例 1 中,有三个询问:
 66 
 67 在第一个询问中,最多可以更改 sss 一个位置上的字符,将 
 68 y
 69  所处的位置改为 
 70 o
 71  得到 
 72 s
 73  74 =
 75 kooomi
 76 ,权值为 333 77 在第二个询问中,最多可以更改 sss 四个位置上的字符,
 78 s
 79  80 =
 81 oooooo
 82  的权值为 666 83 在第三个询问中,最多可以更改 sss 四个位置上的字符,
 84 s
 85  86 =
 87 mmmmmi
 88  89 s
 90  91 =
 92 kmmmmm
 93  的权值均为 555 94 样例输入 2
 95 
 96 15
 97 yamatonadeshiko
 98 10
 99 1 a
100 2 a
101 3 a
102 4 a
103 5 a
104 1 b
105 2 b
106 3 b
107 4 b
108 5 b
109 样例输出 2
110 
111 3
112 4
113 5
114 7
115 8
116 1
117 2
118 3
119 4
120 5
121 样例输入 3
122 
123 10
124 aaaaaaaaaa
125 2
126 10 b
127 10 z
128 样例输出 3
129 
130 10
131 10
132 数据范围与提示
133 1≤n≤15001 \leq n \leq 1\,5001≤n≤1500
134 1≤q≤2000001 \leq q \leq 200\,0001≤q≤200000
135 1≤mi≤n1 \leq m_i \leq n1≤m
136 ?i
137 ?? ≤n,cic_ic
138 ?i
139 ??  为小写英文字母
140 
141 コイスル キセツハ ヨクバリ サーキュレーション
142 恋爱的季节是激情洋溢的循环
143 コイスル キモチハ ヨクバリ サーキュレーション
144 恋爱的心情是激情洋溢的循环
145             ——「恋愛サーキュレーション」
题面

 

技术分享
 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\n",ans);
65     }
66     return 0;
67 }
68 
69 int Hope=AC();
70 int main(){;}
TLE 的 19分暴力

 

以上是关于9.5——模拟赛的主要内容,如果未能解决你的问题,请参考以下文章

9.5模拟赛

9.5 模拟试题

9.5noip模拟试题

无法模拟 Glassfish Jersey 客户端响应对象

[代码审计]极致CMS1.9.5存在文件上传漏洞

[代码审计]极致CMS1.9.5存在文件上传漏洞