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;没办法想的太多了,忘记是连续的数列 我们枚 ...
随机推荐
- Linux多任务编程之四:exit()函数及其基础实验(转)
来源:CSDN 作者:王文松 转自Linux公社 exit()和_exit()函数 函数说明 创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit() ...
- 题解:2018级算法第三次上机 C3-Zexal的浩瀚星辰
题目描述: 样例: 实现解释: 一道结合了火箭发射的贪心题目 知识点: 贪心,优先队列 题目分析: 根据题目描述可知,延迟后时间是正常推进的,也就是假设共有n个火箭,推迟k小时.则在到达k+1小时时, ...
- Maven 专题(二):vscode 创建一个java Maven项目(vscode)以HdfsClientDemo 为例
1.打开vs code软件,最好创建好自己的工程并使用vs code打开 2. 使用快捷键ctrl + shift + p按键,输入maven进行搜索,选中如图诉讼hi的create mavene ...
- java 数据结构(五):数据结构简述
1.数据结构概述数据结构(Data Structure是一门和计算机硬件与软件都密切相关的学科,它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储数据并进行高效率的运用,涉及的内容包含 ...
- java 基本语法(十二) 数组(五)Arrays工具类的使用
1.理解:① 定义在java.util包下.② Arrays:提供了很多操作数组的方法. 2.使用: //1.boolean equals(int[] a,int[] b):判断两个数组是否相等. i ...
- SQLAlchemy(一):SQLAlchemy去连接数据库、ORM介绍、将ORM模型映射到数据库中
SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到数据库中 目录 SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到 ...
- Kafka 信息整理
请说明什么是传统的消息传递方法? 传统的消息传递方法包括两种: ·排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人. ·发布-订阅:在这个模型中,消息被广播给所有的用户. 为 ...
- js dom演示
<body> <div id="div1"> <p name="p1">p1内容</p> <p name= ...
- OSCP Learning Notes - Post Exploitation(1)
Linux Post Exploitation Target Sever: Kioptrix Level 1 1. Search the payloads types. msfvenom -l pay ...
- 性能测试必备知识(4)- 使用 stress 和 sysstat
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html stress 介绍 Linux 系统压力测试 ...