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(){;} 

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,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(){;}

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′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(){;}

TLE 的 19分暴力

时间: 2024-08-27 01:18:17

9.5——模拟赛的相关文章

【BZOJ】【2741】【FOTILE模拟赛】L

可持久化Trie+分块 神题……Orz zyf & lyd 首先我们先将整个序列搞个前缀异或和,那么某一段的异或和,就变成了两个数的异或和,所以我们就将询问[某个区间中最大的区间异或和]改变成[某个区间中 max(两个数的异或和)] 要是我们能将所有[l,r]的答案都预处理出来,那么我们就可以O(1)回答了:然而我们并不能. 一个常见的折中方案:分块! 这里先假设我们实现了一个神奇的函数ask(l,r,x),可以帮我们求出[l,r]这个区间中的数,与x最大的异或值. 我们不预处理所有的左端点,我

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=

bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 ... xor Aj),其中l<=i<=j<=r. 为了体现在线操作,对于一个询问(x,y):

9.14 模拟赛

模拟赛第三弹~ T1 题意:给你一个数列,要求删掉任意一种整数,使得剩下的新数列中连续的相等的数最多 例如 2 7 3 7 7 3 3 7 7 5 7,删掉3以后剩的7有四个连续的,最多 思路:暴力枚举去掉哪个......这算是一道水题吧 代码丢了...... TAT T2 题意:有n本书,每本书有宽度和高度.现在你有无数个书架,每个书架的宽度为w,高度由最高的书决定 问在书本按顺序放的情况下,总的书架高度最小是多少 思路:dp,dp[i]表示做到第i本书时的最小高度和. 每次先找到能以编号j的

2014-9-9 NOIP模拟赛

东方幻想乡系列模拟赛Stage 1命题 Nettle审题 Barty ccy1991911 FlanS39 Wagner T2 高精除高精,从来没写过,不知道怎么写,我就用大数减小数ans次,果断超时. T4 Tarjan的板子题,好久没写,中间出现了一些小错误 ①是尽管有双向边,Tarjan函数中也不必排除双向边 ②Tarjan算法有时候不能一步完成,需要做最多n次,用循环解决 ③问题是关于这个题目的虽然输入n代表有n个点,但是下面的连边中有些点根本没出现过,所以设一个数组记录有效点. Pro

【题解】PAT团体程序设计天梯赛 - 模拟赛

由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 设计一个分数类,重载加法运算符,注意要约分,用欧几里得算法求个最大公约数即可. 1 #include <cstdio> 2 3 long long abs(long long x) 4 { 5 return x < 0 ? -x : x; 6 } 7 8 long long gcd(long

20161027模拟赛解题报告

20161027模拟赛解题报告 By shenben T1 数学题 模拟即可. 注意开long long T2 技巧题 图片为本题第一张图.(无奈,图传不上来) 首先第一问图中的“Y 字形”的数量,这么简单,在此不细讲. 详见代码 O(n)累加一下就好了 主要说说第二问怎么搞 预处理 每个点分别与其他那些点相连 权值为第1,2,3大(若没有2,3大,就忽略).记录一下权值与对应的点的标号.目的是方便下面的判断. 枚举入度>=3的点,即点B(有多个) 再枚举点B相连的D点(不是点A,C). Ste

[GRYZ]寒假模拟赛

写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优(le)美(se)的文字加工后,有故事有题目有人物有奸情的模拟赛正式呈上. 我是正文 题目名 GRYZ娱乐时刻 GRYZ追击时刻 GRYZ就餐时刻 源文件 hyxzc.cpp/c/pas clikar.cpp/c/pas eat.cpp/c/pas 输入文件 hyxzc.in clikar.in ea

【简单思考】noip模拟赛 NTR酋长

NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长有一个技能是沟壑(F).它会在地图上产生一条长长的障碍物阻挡人前进.Czy打算在一个n*m的矩形(必经之路?)中放上NTR酋长.NTR酋长要一个一个放下去,而且每放一个都会向四角倾斜的方向放出无限长的沟壑,而已经被沟壑挡住的地方就不能再放NTR酋长了. 请注意:不会出现沟壑的路径挡住另一个沟壑的情况

【noip模拟赛】 射击

这题似乎是什么安阳一中的模拟题,不管了,反正是学长出的noip模拟赛里面的题目.... 射击(shoot.pas/.c/.cpp) 时间限制:1s,内存限制128MB 题目描述: 据史书记载,对越反击战时期,有位中国侦察兵,他的代号叫814.一天他执行狙击任务,他的任务地区是n座恰巧在一条直线上的山.这些山所在直线恰巧为东西走向,山从东到西依次编号为1~n.一天814隐藏在编号为k的山上,每座山上都有1个目标. 814也非常的厉害,任务结束时杀了很多人,可是史书中只记载了两点: 1:814一定攻