17-05-24模拟赛

T1:

(1)将两种数分别放入两个队列中,对当前的两个数进行比较,将较小的数放入答案栈并进行扩展即可。

(2)从前往后维护答案栈的单调不增性,若删的数字达到m个则将剩余数字全部进栈,若答案栈搜完但删的数字仍不到m个则从后往前删去数字直到删的数字达到m个。

Code:

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 int q[2][50005],qu[30005],head[2],tail[2];
 9 char ch[200005];
10 int k,m,cnt=1,x,del=0;
11 int main()
12 {
13     scanf("%d%d",&k,&m);qu[1]=1;q[0][1]=3;q[1][1]=9;
14     head[0]=head[1]=1;tail[1]=tail[0]=1;
15     while (cnt<k){
16         if (q[0][head[0]]<q[1][head[1]])qu[++cnt]=q[0][head[0]],head[0]++;
17         else qu[++cnt]=q[1][head[1]],head[1]++;
18         q[0][++tail[0]]=(qu[cnt]<<1)+1;q[1][++tail[1]]=(qu[cnt]<<2)+5;
19     }
20     for (int i=1;i<=cnt;++i) printf("%d",qu[i]);cout<<endl;
21     int cur=0;ch[0]=‘1‘;
22     for (int i=2;i<=cnt;++i){
23         char x[7];sprintf(x,"%d",qu[i]);
24         for (int j=0;j<strlen(x);++j){
25             if (del==m) ch[++cur]=x[j];
26             else {
27                 while (x[j]>ch[cur]&&cur>=0&&del<m) --cur,++del;ch[++cur]=x[j];
28             }
29         }
30     }
31     if (del<m) cur-=(m-del);
32     for (int i=0;i<=cur;++i) printf("%c",ch[i]);return 0;
33 }

T2:

(1)读入时将大于b的数的a值设为1,小于b的数的a值设为-1,b的a值设为0,并找到b的位置。

(2)从b开始分别向左向右求前缀和,并将该和存在的个数+1。

(3)搜索前缀和的个数,答案加上两个相加为0的前缀和的个数的乘积。

注意到C++语言不支持数组下标为负,所以前缀和初始化时以n开始,答案应加上两个相加为2n的前缀和的个数的乘积。

Code:

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 int a[100005],l[200005],r[200005],x,y,t,n,b,pos=0,ans;
 9 int main()
10 {
11     scanf("%d%d",&n,&b);
12     for (int i=1;i<=n;++i){
13         scanf("%d",&t);if(t==b) a[i]=0,pos=i;
14         else a[i]=t>b?1:-1;
15     }x=y=n;l[n]=r[n]=1;
16     for (int i=pos-1;i;--i) x+=a[i],l[x]++;
17     for (int i=pos+1;i<=n;++i) y+=a[i],r[y]++;
18     for (int i=1;i<=(n<<1);++i) ans+=l[i]*r[(n<<1)-i];
19     printf("%d",ans);return 0;
20 }
时间: 2024-10-09 17:57:44

17-05-24模拟赛的相关文章

2018/5/24模拟赛总结

shzr带病AK虐爆全场... T1n皇后: 这题没啥好说的... T2有重复元素的排列问题: [问题描述] 设R={ r1, r2 , -, rn}是要进行排列的n个元素.其中元素r1, r2 , -, rn可能相同.试设计一个算法,列出R的所有不同排列. [编程任务] 给定n 以及待排列的n 个元素.计算出这n 个元素的所有不同排列. [输入格式] 由perm.in输入数据.文件的第1 行是元素个数n,1≤n≤500.接下来的1 行是待排列的n个元素. [输出格式] 计算出的n个元素的所有不

2017.9.17校内noip模拟赛解题报告

预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Time Limit:1000ms Memory Limit:64MB题目描述LYK 找到了一根巧克力棒,但是这根巧克力棒太长了,LYK 无法一口吞进去.具体地,这根巧克力棒长为 n,它想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后慢慢享用.它打算每次将一根长为 k 的巧克力棒折成两段长为 a

11.24 模拟赛

T1 bzoj 4730 Alice和Bob又在玩游戏 题目大意: Alice和Bob在玩游戏 n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最小的点 Alice和Bob轮流操作,每回合选择一个没有被删除的节点x,将x及其所有祖先全部删除,不能操作的人输 思路: 根据博弈论的一些定理可以得到一个优秀的$n^2$做法 由$SG$定理得 每个点的$SG$函数值为$mex${子树内一个点的SG xor 该根节点其余儿子的SG} 因此对于每个点我们可以开一个t

2019.10.24模拟赛赛后总结

本文原创,如果有不到位的地方欢迎通过右下角的按钮私信我! A.Icow Player 题目描述 被无止境的农活压榨得筋疲力尽后,Farmer John打算用他在MP3播放器市场新买的iCow来听些音乐,放松一下.FJ的iCow里存了N(1 <= N <= 1,000)首曲子,按1..N依次编号.至于曲子播放的顺序,则是按一个Farmer John自己设计的算法来决定: * 第i首曲子有一个初始权值R_i(1 <= R_i <= 10,000). * 当一首曲子播放完毕,接下来播放的

NOIP模拟9.17(TYVJNOIP2017模拟赛D2)

曼德布洛特(Mandelbrot)集合 算法课W1·leetcode654.MaximumBinaryTree 官方文档PackageOverview软件包概述--几何内核类 glClearColor第四个参数有什么用? dxd奈犯材http://p.baidu.com/itopic/main/center?uid=00266162633962396665360ebc&59m6丶号斗yrci6b觅滓问http://p.baidu.com/itopic/main/center?uid=4ba761

『8.24 模拟赛』ranwen的服务器

题目链接戳这里n(*≧▽≦*)n 题目描述 众所周知,ranwen建造出了强大的服务器网,规模十分庞大,有n个服务器,组成一个树形结构,1号点是总站,但是有时候可能会因为主机被回收,机房断电等事故造成服务器各种GG,现在有m个事件,可能为:1.查询x到根路径上第一个已经挂掉的服务器传输路径 2.x到y路径上的服务器传输路径全挂了.(不存在则输出0) 解题思路 上来先是树剖,然而只过了样例,爆0... 题面上提示了正解是并查集,但是并没有想出来,听完题解瞬间懂了.... 并查集,当然最方便的是合并

2019.10.24模拟赛

T1 古代龙人的谜题 Mark Douglas 是一名调查员.他接受了「调查古代龙人」的任务.经过千辛万苦,Mark 终于找到了一位古代龙人.Mark 找到他时,他正在摆弄一些秘药,其中一些药丸由于是从很久以前流传下来的,发出了独特的光泽.古代龙人告诉了 Mark 一些他想知道的事情,看了看手中的秘药,决定考一考这位来访者. 古代龙人手中共有\(n\)粒秘药,我们可以用\(1\)表示「古老的秘药」,其余的用\(0\)表示.他将它们排成一列.古代龙人认为平衡是美的,于是他问 Mark 能选出多少个

ZROI提高组模拟赛05总结

ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生生把一个弱智题变成了一个不可做题 最后竟然在转化两次后的模型上以为自己做出来了 这个题比别人多花的1h左右的时间,而且只得到了30分,成为了这场比赛失败的关键因素 T2 依旧是一道简单题 有人20min之内就A掉了 感觉放在CF里最多算一道Div2 D,还是简单的那种 可是我又一次想复杂了 大意就是

140725模拟赛总结

A:hdu4847    字符串匹配第一想法是KMP,写了好长时间结果还TLE了-_-||,实际上用个简单的枚举判断就能解决.因为待验证的字符串"doge"很小.写A题的时候还被输入卡了半天.Tips1:输入至文件结尾(eof)的常用方法:     while (cin>>a)        //最常用的     while (cin.getline(s,30))    //按行读入前30个字符.空格也读入    getline(cin,s)        //和getli

体育成绩统计——20180801模拟赛T3

体育成绩统计 / Score 题目描述 正所谓“无体育,不清华”.为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心.然而每到学期期末时,面对海量的原始数据,如何对数据进行处理,得到同学们的体育总评成绩却又成了体育部老师的一大难题. 对于大一的同学们来说,体育课的总评成绩由五部分组成:体育课专项成绩(满分50分).长跑测试成绩(满分20分).“阳光长跑”成绩(满分10分).体质测试成绩(满分10分).“大一专项计划”成绩(满分10分)