csp

CSP 2019.11.14 密码

☆樱花仙子☆ 提交于 2019-12-04 11:04:04
题目描述 哪里有压迫,哪里就有反抗。 moreD 的宠物在法庭的帮助下终于反抗了。作为一只聪明的宠物,他打算把 魔法使 moreD 的魔法书盗去,夺取 moreD 的魔法能力。但 moreD 怎么会让自己的 魔法书轻易地被盗取?moreD 在魔法书上设置了一个密码锁,密码锁上有一个问 题。 施以斯卧铺魔法吧,你有 M 次机会,如此将得完美密码。 然后是一串小写字母串。 moreD 的宠物斯卧铺魔法就是施法时的字符串其中相邻两位交换。 而 moreD 对于完美密码的定义自然是最小字典序了。 请帮助 moreD 的宠物,想出密码吧。 输入格式 第一行一个整数 M,表示操作次数。 第二行一串小写字母组成的字符串 S,如题目所示。 输出格式 输出完美密码 输入样例 3 dcba 输出样例 adcb 数据范围 对于 30%的数据|S|≤10 对于 60%的数据|S|≤3,000 对于 100%的数据 8≤|S|≤100,000,M≤(|S|-8)^2+2 后记 宠物最终战胜了 moreD,和自己的宠物快乐地生活着。 样例解释 先对第 3,4 两位施法,字符串变成 dcab,然后对第 2,3 两位施法,字符串 变成 dacb,最后对第 1,2 两位施法,字符串变成 adcb。 一眼望过去 很明显是个贪心啊,要求在一定的步骤内通过两两交换使得字典序最小. 解法 针对30%的数据: 暴力dfs。

CSP 考前注意事项

落爺英雄遲暮 提交于 2019-12-04 09:22:47
下面的自己差不多都犯过,希望引以为戒。 1.及时取模,取模负数记得转成正数,注意乘法的过程中可能会爆long long,十年OI一场空,不开longlong见祖宗,一顿操作猛如虎,不开longlong250. 2.写了预处理的函数一定要调用。 3.函数一定要加上函数名,不要只加括号。 4.高精度要注意答案为0的情况。 5.结构体里的数组不能开得太大. 6.if();/for();直接加分号 7.线段树change&ask函数写判断范围 8.ios::sync_with_stdio(false);后还用scanf(); 9.不要乱用memset,尤其是给double类型的赋初值。重点是还不容易检查出来。 10.最后5、6分钟的时候千万不要再改代码,因为大脑是不清楚的,尝试编译一下,不要CE。 11.数据输入不一定是按照编号输入的,读进来后需要排序。 12.不要把 ans定义为char类型的... 13.不要重复使用同一个变量,不要将很多变量用一个名字。 14.一定要对拍,就算不对拍也一定要出足够的数据。 15.线段树一定要update 16.树链剖分son和siz区分开 17.一定要来一组大数据,试一试会不会RE、TLE. 18.1<<N和N<<1区分开 19.注意数据范围里可能有0的可能 20.注意位运算的优先级 21.看清保留几位小数 22

[模板大全] CSP前有用的板子(更新至两篇)

两盒软妹~` 提交于 2019-12-04 07:52:49
目录 图论 SPFA Dijkstra CSP前把重要的板子全部打一遍吧,顺便放一些下饭集锦(在每个板子的下面) 图论 SPFA ll dis[N]; bool vis[N]; queue<int> q; void spfa(int s) { memset(vis,0,sizeof(vis)); memset(dis,0x3f,sizeof(dis)); q.push(s);vis[s]=1;dis[s]=0; while(!q.empty()) { int u=q.front();q.pop();vis[u]=0; for(register int i=head[u];i;i=edge[i].next) { int v=edge[i].to; if(dis[v]>dis[u]+edge[i].dis) { dis[v]=dis[u]+edge[i].dis; if(!vis[v]) { q.push(v); vis[v]=1; } } } } } 注意事项:没什么好注意的,spfa极其优美,手感舒适 下饭集锦:v写成了edge[i].next Dijkstra struct Node { int u; ll dis; bool operator < (const Node &a) const { return a.dis<dis; } }; ll dis[N]; bool vis

[蒟蒻梦想-CSP考前加油赛] B 画地为佬

早过忘川 提交于 2019-12-04 07:16:25
画地为佬 没有想到什么好的算法……感觉很暴力的样子…… 大致思路是先找一个刚刚好不越界的大正方形块,然后一根一根围墙往上加。 首先考虑方块数量与围墙之间的关系: 方块的数量是 \(1^2\) 围墙的数量是 \(2 \times 1 \times(1+1)\) 0 方块的数量是 \(2^2\) 围墙的数量是 \(2 \times 2 \times(1+2)\) 0 0 0 0 方块的数量为 \(3^2\) 围墙的数量是 \(2 \times 3 \times(1+3)\) 0 0 0 0 0 0 0 0 0 对于 \(n\) 块的情况,围墙的数量是 \(m=2n (1+n)\) 而现在给定的是围墙的数量 \(m\) ,因此解方程 \(m=2n (1+n)\) 。 由求根公式: \[ n=\lfloor \frac{ \sqrt{4+8m}-2}{4} \rfloor \] 算除了大正方形还剩下多少围墙: \[ rest=m-2n(n+1) \] 讨论剩下的围墙能围成几个块 \[ RestBlock=\left\{ \begin{aligned} & \lfloor (rest-1)/2 \rfloor ,\quad \quad rest \leq 2n+1\\ & \lfloor (rest-1)/2 \rfloor +n, \ rest > 2n+1\\ \end{aligned}

CSP 前模板

对着背影说爱祢 提交于 2019-12-04 06:48:29
快CSP了,放一下自己打的板子。 /*tarjan 缩点*/ void tarajn(int x) { dfn[x]=low[x]=++cnt;zhan[++top]=x; vis[x]=1; for(int i=head[x];i;i=e[i].nt) { if(!dfn[e[i].to]) { tarjan(e[i].to); low[x]=min(low[x],low[e[i].to]); } else if(vis[e[i].to])low[x]=min(low[x],dfn[e[i].to]); } if(dfn[x]==low[x]) { int k;kuai++; do { k=zhan[top--]; c[k]=kuai; vis[k]=0; }while(x!=k); } } /*快速幂*/ LL ksm(LL a,LL b,LL mod) { LL res=1; for(;b;b>>=1,a=a*a%mod)if(b&1)res=res*a%mod; return res; } /*龟速乘*/ LL gsc(LL a,lLL b,LL mod) { LL res=0; for(;b;b>>=1,a=(a+a)%mod)if(b&1)res=(res+a)%mod; return res; } /*线性筛素数*/ for(int i=2;i<=M;++i) {

11.9 CSP赛前集训反思

China☆狼群 提交于 2019-12-04 01:05:25
CSP赛前集训反思 今天是单赛日; 早上,由于某些原因未能参加所谓的???信心赛??? 我只在家里打了大概1h30min左右 T1:水题,Dp一下,注意判边界。没了 T2:二分答案?? 我完全没往二分答案的方向去想QAQ.这类中位数的题目做少了,充分暴露自己的不足QAQ 但是;;;;;;;;;; 不用正解其实也可以拿到 整整80pts ???? 这里说下骗分的卡时做法。。首先这道题某些区间的中位数会被重复讨论到多次,所以当前进行过多次搜索过后的值是很有可能是全局的最优值,随着运算次数的增加,搜到全局最优值的概率就越大,所以只要在程序将要跑到1s时结束掉就可以了 不用卡时本题只有30pts,用了后最多有80pts(主要看脸)这里放一下wandy julao优秀的统计运行时间的程序 // #include<bits/stdc++.h> using namespace std; main(){ int st=clock(); for(int i=1;i<=1e9;i++) { if(clock()-st>=700)break; } } T3:嘛。。。。我当时就只有20min了,想到了n^2暴力的60pts没时间去打了QAQ。。。。。。 来源: https://www.cnblogs.com/pveds/p/11826381.html

11.7 CSP赛前集训小结

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 23:24:40
11.7 CSP赛前集训小结 今天是单赛日 1.上午的订正:没啥好说的 昨天的T1,稍微写下思路,维护高度差然后直接分情况讨论会很让人自闭,再加上符号+-和变化量的不同,会爆炸,那么不妨将之间的变化先减去,算上答案后再再加回来即可,正难则反的道理。 #include<stdio.h> #include<bits/stdc++.h> #define maxn 200005 using namespace std; long long Ht[maxn]; long long n,q,s,t; long long Getdel(long long x) { return x > 0 ? x * s : x * t; } long long T=0; int main() { scanf("%lld%lld%lld%lld",&n,&q,&s,&t); s=-s; t=-t; for(long long i=0;i<=n;i++) scanf("%lld",&Ht[i]); for(long long i=n;i;i--) Ht[i]-=Ht[i-1]; for(long long i=1;i<=n;i++) T+=Getdel(Ht[i]); long long x,y; long long temp; while(q--) { scanf("%lld%lld%lld",&x,&y,

【CSP膜你赛】大逃亡

心不动则不痛 提交于 2019-12-03 23:19:31
题目描述 魔王撒旦为了建立魔物的乐土,率领亚多拉玛雷克、艾谢尔、路西菲尔、以 及马纳果达这四位恶魔大元帅进攻人类世界。然而此时手持圣剑的勇者艾米莉亚出现了。 战败的魔王逃跑时穿越到了地球,以真奥贞夫的身份过着打工族的生活。最近真奥贞夫手头有点紧,他接到一个待遇不错的任务,但是却没有时间。无奈之下,他只能找到可靠的 YxuanwKeith 来帮忙。 然而王导最近忙于筹拍宣传片,抽不出时间,于是 YxuanwKeith 又找到了你来替他完成这个工作。YxuanwKeith 帮忙的工作是为一个大赛设计分队方式。 这个比赛有 N 个人参加,我们可以给这 N 个人分任意数量(不超过N)的队伍,相同队伍的人用相同数字来表示。如果有多种表示,我们认为字典序最小的表示才是有效的。 由于组队的情况实在是太多了,今年大赛组委会决定在比赛的第 i 天采用所有序列中字典序第i小的分队方式。 现在组委会会向你询问一个序列,希望你能告诉他们这个序列的分队方式会在哪一天被采用。由于答案可能会很大,所以组委会只关心对1000007取模后的结果。 输入格式 第一行,一个整数 N 表示参赛人数。 第二行,N 个整数,表示询问的分队方式的序列。 输出格式 一行,一个整数表示这种方式会在第几天被采用。答案对 1,000,007 取模。 输入样例 3 1 2 2 输出样例 4 提示 比赛各天的分队情况如下:第一天:1,1

【CSP膜你赛】ATM

故事扮演 提交于 2019-12-03 23:05:26
题目描述 小沈阳在小品里说过:“人生最痛苦的事情是人死了,钱还没花掉”。 于是小宋(80 岁)决定要将所有的储蓄从 ATM 机中取出花光。 小宋忘记 了她有多少存款(银行卡密码她是记得的 2333),这个奇怪的ATM不支持查询 存款余额功能。小宋知道她存款的唯一信息是存款上限是K元,这意味着小宋的存款 x 是 0 到 K 之间的随机整数(包括 K)。 每次小宋都可以尝试从 ATM 中拿出一些钱。 如果她要取的 y 元钱不大于 她的存款,ATM 将立即给小宋y元。 但如果她的存款小于y,小宋将收到ATM的警告。如果小宋被警告超过w次,那么她将被警方带走,作为小偷。 小宋希望取钱次数期望最小。 由于小宋聪明,她总是采取最好的策略。 请计算小宋将所有储蓄从自动取款机中取出期望次数最小值是多少,并不得被警方带走。 输入格式 每个测试点包含多组测试数据(最多 10 组)每组测试数据包含两个整数 K,和 W 1≤K,W≤2000 输出格式 对于每组测试数据输出取钱次数最小的期望值,舍入到小数点后 6 位。 输入样例 1 1 4 2 20 3 输出样例 1.000000 2.400000 4.523810 分析 我以为所谓的最优策略仅仅是二分,没想到这个80岁的老奶奶不仅会二分,还会期望dp 本题的最好策略的意思就是每次的选择期望次数最小的方案进行决策 (语文不好的悲哀

11.5 临近csp·道别

落花浮王杯 提交于 2019-12-03 15:31:29
差不多到写这个东西的时候了? 嗯,按今天的日期来算的话,还有不到十天就是csp。感觉对我这种家伙来说应该算是终结了? 放在之前的话肯定会写很多东西的,不过现在大约有点不知道写什么比较合适。 所以只是祝大家接下来都能顺利考出理想的成绩吧,rp++。 啊多少有点敷衍了事了……?那再认真点儿想想有什么能说的。 我们这一届赶得不算好,我头一次接触oi是在初中快毕业的时候。而我们的下一届从初二就开始学习了,去年我们还在学搜索的相同的时间段今年他们已经在学树形DP了…… 一开始想接触oi是因为初中挂在班主任嘴边的一位同样学oi的学长,虽然学长最后靠着文化课裸分市状元走了清华…当时学长应邀来班里给初三的毕业生们科普高中可以接触到的竞赛,就是那时候头一次知道还有oi这个东西存在的。具体的有写在第一篇博文里(现在看看那时候字里行间的心情还真是有点感慨啊233)。 越临近结尾的时候就越会想到开始,就好像常常听到“人死前会看到一生的走马灯”一样,本质上都是人们对于离开这件事分外不舍。一开始为什么会想要学oi呢,不仅仅是受到优秀前辈的影响,还因为自己从小就喜欢这些东西吧。小学的时候巧合之下参加了计算机表演赛,参加了山西省的队伍去北京比赛,然而那个时候我甚至还不会盲打,虽说现在也是一指禅……扯远了。所以硬要总结的话,一定是oi这类事物对我有着天生的吸引力吧。 仅仅一年多的时间,还是感觉太短了