CF R 632 div2 1333D Challenges in school №41
考试的时候读错题了+代码UB了 所以wa到自闭 然后放弃治疗。
赛后发现UB的原因是 scanf读int类型的时候 宏定义里面是lld的类型导致UB.
读错题的原因是 太急了 而且题目描述不是很清晰 导致按照自己含糊不清的想法+样例的佐证 成为了另外一个题目。
这道题是要求我们进行构造。
对于一个要求我们每轮都要进行一次扭头 且刚好在k轮都进行完。
(这类似于冒泡排序 但是我们不考虑冒泡排序的性质也是可以写的。
考虑 会进行多少次这样的操作 显然可以统计出来 也就是说我们最多能坚持的轮数是逆序对的个数.
因为左箭头一直在向左传递 右箭头同理 对于左箭头在左 右箭头在右的情况 那么他们一定会进行相遇。->逆序对个数.
考虑最少坚持多少轮 这个我们每轮都进行一次模拟也可以求出来 这个模拟的过程 不能每次便利序列考虑由上一次的位置进行拓展 可以发现最多拓展n^2个 所以复杂度为n^2.
如果k在最大值和最小值之间 那么显然可以构造出来。
一种比较简单的构造方法:先以轮为单位做 然后发现后面的不够的时候再也个位单位进行拓展即可。
update:看了其他人的题解 发现唯一的不同是在求最小的时候 他们都暴力拓展了 并没有由上次的得到现在的。
这样做的复杂度为 最少做几轮*n。通过不断打表可以发现最少n轮 但是我无法证明这个结论 所以为了求稳 还是考虑我的那种方法 稳定n^2.
const int MAXN=3010,maxn=3000010;
int n,k,ans;
vector<int>g[maxn];
char a[MAXN];
int b[MAXN],s1[MAXN],c[MAXN],top1,s2[MAXN],top2,vis[MAXN];
int main()
{
freopen("1.in","r",stdin);
gt(n);gt(k);gc(a);b[n+1]=-1;b[0]=-1;
for(int i=1;i<=n;++i)if(a[i]=='R')b[i]=1;
rep(1,n,i)if(b[i]==1&&!b[i+1])s1[++top1]=i,s1[++top1]=i+1,vis[i]=vis[i+1]=1;
int w1=0,w2=0;
while(top1)
{
top2=0;++w1;
if(w1>k){puts("-1");return 0;}
rep(1,top1,i)
{
b[s1[i]]^=1;vis[s1[i]]=0;
if(!b[s1[i]])g[w1].pb(s1[i]),++w2;
}
rep(1,top1,i)
{
if(b[s1[i]-1]==1&&!b[s1[i]]&&!vis[s1[i]])s2[++top2]=s1[i]-1,s2[++top2]=s1[i],vis[s1[i]-1]=1,vis[s1[i]]=1;
if(b[s1[i]]==1&&!b[s1[i]+1]&&!vis[s1[i]])s2[++top2]=s1[i],s2[++top2]=s1[i]+1,vis[s1[i]+1]=1,vis[s1[i]]=1;
}
top1=0;
rep(1,top2,j)s1[++top1]=s2[j];
}
if(w2<k){puts("-1");return 0;}
rep(1,w1,i)
{
int sz=g[i].size();
if(w2-sz>=k-1)
{
printf("%d",sz);--k;w2-=sz;
rep(0,sz-1,j)printf(" %d",g[i][j]);
puts("");
}
else
{
--k;w2-=sz;
int res=k-w2;
printf("%d",sz-res);
for(int j=0;j<=sz-res-1;++j)printf(" %d",g[i][j]);
puts("");
for(int j=sz-res;j<sz;++j)printf("1 %d",g[i][j]),puts("");
++i;
while(i<=w1)
{
for(int j=0;j<g[i].size();++j)printf("1 %d",g[i][j]),puts("");
++i;
}
}
}
return 0;
}
CF R 632 div2 1333D Challenges in school №41的更多相关文章
- CF R 632 div2 1333F Kate and imperfection
赛后看了半天题 才把题目看懂 英语水平极差. 意思:定义一个集合S的权值为max{gcd(a,b)};且\(a\neq b\) 这个集合可以从1~n中选出一些数字 求出当集合大小为k时的最小价值. 无 ...
- CF R 639 div2 F Review 贪心 二分
LINK:Résumé Review 这道题让我眼前一亮没想到二分这么绝. 由于每个\(b_i\)都是局部的 全局只有一个限制\(\sum_{i=1}^nb_i=k\) 所以dp没有什么用 我们只需要 ...
- CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针
LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ...
- E CF R 85 div2 1334E. Divisor Paths
LINK:Divisor Paths 考试的时候已经想到结论了 可是质因数分解想法错了 导致自闭. 一张图 一共有D个节点 每个节点x会向y连边 当且仅当y|x,x/y是一个质数. 设f(d)表示d的 ...
- CF R 630 div2 1332 F Independent Set
LINK:Independent Set 题目定义了 独立集和边诱导子图.然而和题目没有多少关系. 给出一棵树 求\(\sum_{E'\neq \varnothing,E'\subset E}w(G( ...
- CF Round #580(div2)题解报告
CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...
- CF round #622 (div2)
CF Round 622 div2 A.简单模拟 B.数学 题意: 某人A参加一个比赛,共n人参加,有两轮,给定这两轮的名次x,y,总排名记为两轮排名和x+y,此值越小名次越前,并且对于与A同分者而言 ...
- CF R 635 div1 C Kaavi and Magic Spell 区间dp
LINK:Kaavi and Magic Spell 一打CF才知道自己原来这么菜 这题完全没想到. 可以发现 如果dp f[i][j]表示前i个字符匹配T的前j个字符的方案数 此时转移变得异常麻烦 ...
- Topcoder srm 632 div2
脑洞太大,简单东西就是想复杂,活该一直DIV2; A:水,基本判断A[I]<=A[I-1],ANS++; B:不知道别人怎么做的,我的是100*N*N;没办法想的太多了,忘记是连续的数列 我们枚 ...
随机推荐
- Java面向对象详解-上
一.类及对象 1. 类的组成成分 属性(成员变量,Field) 方法(成员方法,函数,Method) 2. 属性 成员变量 vs 局部变量 相同点: 遵循变量声明的格式: 数据类型 变量名 = 初始化 ...
- CSRF攻击原理以及防御方法(写的很好)
转载地址:http://www.phpddt.com/reprint/csrf.html CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟 ...
- 数据可视化之powerBI技巧(十五)采悟:Power BI动态技巧:动态显示数据层级
今天给大家分享一个动态显示数据层级的技巧,效果如下: 无论想按什么维度.什么顺序查看分析数据,只需要选择不同的切片器组合就行了. 方法如下:01 | 把数据聚合为分析需要的最细粒度 本文假设最细分析粒 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- iconfont - 好用免费的图标库
某里出品 打开首页???????搜索框在哪里 网站:点我
- Oracle对表进行备份
前言: 在实际开发中,我们常常需要对单张或多张表进行备份,以下博主就从这两个方面进行总结.如需转载,请标明来处,谢谢! 在备份前我们先创建表盒相关测试的数据 -- Create table creat ...
- 关于node-sass安装失败问题
在进行Vue开发中npm run dev报错,按照提示尝试进行npm以及cnpm安装均失败 解决办法:npm uninstall node-sass卸载模块 指定淘宝镜像源安装 npm i node- ...
- WeChat 小程序开发
第一步 去微信公众号平台注册> 一个账号https://mp.weixin.qq.com/ 填写完后 会获得一个APPID 2. 点击工具下载微信开发者工具安装即可, 1 2 3 微信开发者工具 ...
- Git Push提示没有权限
中途协助别人开发的一个小项目, 我已经是该项目的Developer, 可是提交代码依然提示无权限 这是由于我是在master上直接提交的, 而GitLab默认是保护master分支的, push只对M ...
- vue学习(十九) 生命周期 了解
生命周期:从vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期 生命周期钩子:就是生命周期事件的别名而已 生命周期钩子==生命周期函数==生命周期事件 生命周期函数分类 ...