LINK: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;
}

最新文章

  1. iOS -[PFPASIDataCompressor compressBytes:length:error:shouldFinish:] in PFPGZIPInvocationCompressor.o
  2. Android的常用adb命令
  3. mysql 性能优化 配置优化
  4. Jenkins简单使用介绍
  5. poj 1679 The Unique MST
  6. java开发--struts2 标签库使用
  7. vijosP1437简单的口令
  8. 导入android项目在eclipse中会报@Override错误
  9. js大小写锁判断
  10. JS的异步回调函数
  11. CS Round#53 E Maxor
  12. hihoCoder #1094 : Lost in the City(枚举,微软苏州校招笔试 12月27日 )
  13. C++中的虚函数表是什么时期建立的?
  14. eclipse出现jdk版本更新导致无法启动
  15. sublime 将tab替换为4个空格 &amp; 显示空格
  16. .Net使用RabbitMQ详解 转载http://www.cnblogs.com/knowledgesea/p/5296008.html
  17. ElasticSearch6.1.1集群搭建
  18. Introduce oneself
  19. Native、Web App、Hybrid、React Native(简称RN)、Weex 间的异同点。
  20. IP分片与重组详解

热门文章

  1. mysql--数据插入覆盖和时间戳的问题
  2. 基于tcp/udp协议的套接字通信
  3. about 蛤蛤
  4. JVM中栈的frames详解
  5. Scala 面向对象(十一):特质(接口) 四
  6. VSCode下,项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  7. 数据可视化之powerBI技巧(二十)采悟:创建度量值,轻松进行分组统计
  8. Unity-ECS-实践
  9. 上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB
  10. 采用 Unicode 标点属性方式的正则表达式,可以去掉所有的标点符号,