9.5——模拟赛
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′a‘a 9 ?′ 10 ?? 不是一个递增序列。序列 a′a‘a 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 中出现次数总和不超过 111。 39 输出格式 40 如果可以将 aaa 中等于零的元素与 bbb 中的元素一一对应并替换,使得得到的序列 a′a‘a 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,14 和 11,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≤100,1≤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(){;}
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,3 和 1,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(){;}
可能没人比这个还麻烦了。。
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′s‘s 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′s‘s 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(){;}
以上是关于9.5——模拟赛的主要内容,如果未能解决你的问题,请参考以下文章