题意:给出一串n个数   为1-n的乱序

一共有两个教练   教练一的队伍是1队  二是二队

教练一选择 当前队列中剩余人数的最大序号   将其和左边k个人 和右边k个人 变为一队

如此反复直到所有人都分好队伍

这题思路很巧妙

一开始以为要搜索最大值  时间效率肯定很低

但是可以对位置进行映射   避免了寻找最大值(1-n 的排序这一点非常适用)

一开始的代码: 仔细一想其实缺乏合理性

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 200000+5
int n,k;
int a[N];
int pos[N];
char ans[N];
int le[N];
int ri[N];
int d=; int main()
{ RII(n,k);
rep(i,,n)
{
RI(a[i]);
pos[ a[i] ]=i;
le[i]=i-;
ri[i]=i+;
} CLR(ans,);
repp(i,n,)
{
if( ans[ pos[i] ] )continue;
ans[ pos[i] ]=d+''; int L=pos[i],R=pos[i]; rep(j,,k)
{
L=le[L];
if(L>=)ans[L]=d+'';
R=ri[R];
if(R<=n)ans[R]=d+'';
}
L=le[L];R=ri[R];
le[R]=L;
ri[L]=R; d=-d;
}
puts(ans+); return ;
}

wa点:

删边有严格的前后之分!!!!  不然会wa

对比:

wa:

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 200000+5
int n,k;
int a[N];
int pos[N];
char ans[N];
int le[N];
int ri[N];
int d=; void del(int x)
{
ans[x]=d+'';
int L=le[x];
int R=ri[x];
le[R]=L;
ri[L]=R;
} int main()
{
RII(n,k);
rep(i,,n)
{
RI(a[i]);
pos[ a[i] ]=i;
le[i]=i-;
ri[i]=i+;
}
repp(i,n,)
{
if( ans[ pos[i] ] )continue; del(pos[i]);
int L=pos[i];
int R=pos[i];
rep(j,,k)
{
L=le[L];
if(L>=)del(L);
R=ri[R];
if(R<=n)del(R);
}
d=-d;
}
puts(ans+);
return ;
}

AC:

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 200000+5
int n,k;
int a[N];
int pos[N];
char ans[N];
int le[N];
int ri[N];
int d=; void del(int x)
{
ans[x]=d+'';
int L=le[x];
int R=ri[x];
le[R]=L;
ri[L]=R;
} int main()
{ RII(n,k);
rep(i,,n)
{
RI(a[i]);
pos[ a[i] ]=i;
le[i]=i-;
ri[i]=i+;
} repp(i,n,)
{
if( ans[ pos[i] ] )continue; del(pos[i]);
int L=le[pos[i]];
int R=ri[pos[i]];
rep(j,,k)
{ if(L>=)del(L),L=le[L]; if(R<=n)del(R),R=ri[R];
} d=-d;
}
puts(ans+); return ;
}

同时来也会出错!!!!!!

AC:

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 200000+5
int n,k;
int a[N];
int pos[N];
char ans[N];
int le[N];
int ri[N];
int d=; void del(int x)
{
ans[x]=d+'';
int L=le[x];
int R=ri[x];
le[R]=L;
ri[L]=R;
} int main()
{
RII(n,k);
rep(i,,n)
{
RI(a[i]);
pos[ a[i] ]=i;
le[i]=i-;
ri[i]=i+;
}
repp(i,n,)
{
if( ans[ pos[i] ] )continue; int L=pos[i];
int R=pos[i];
rep(j,,k)
{
L=le[L];
if(L==)break;
del(L);
}
rep(j,,k)
{
R=ri[R];
if(R>n)break;
del(R);
} del(pos[i]);
d=-d;
}
puts(ans+);
return ;
}

WA:

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 200000+5
int n,k;
int a[N];
int pos[N];
char ans[N];
int le[N];
int ri[N];
int d=; void del(int x)
{
ans[x]=d+'';
int L=le[x];
int R=ri[x];
le[R]=L;
ri[L]=R;
} int main()
{
RII(n,k);
rep(i,,n)
{
RI(a[i]);
pos[ a[i] ]=i;
le[i]=i-;
ri[i]=i+;
}
repp(i,n,)
{
if( ans[ pos[i] ] )continue; int L=pos[i];
int R=pos[i];
rep(j,,k)
{
L=le[L];
if(L>)
del(L);
R=ri[R];
if(R<=n)
del(R); } del(pos[i]);
d=-d;
}
puts(ans+);
return ;
}

这种的话并不是因为同时来!!是因为右边跳到左边了!!!!!!!!!!

AC:

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 200000+5
int n,k;
int a[N];
int pos[N];
char ans[N];
int le[N];
int ri[N];
int d=; void del(int x)
{
ans[x]=d+'';
int L=le[x];
int R=ri[x];
le[R]=L;
ri[L]=R;
} int main()
{
RII(n,k);
rep(i,,n)
{
RI(a[i]);
pos[ a[i] ]=i;
le[i]=i-;
ri[i]=i+;
}
ri[n+]=n+; repp(i,n,)
{
if( ans[ pos[i] ] )continue; int L=pos[i];
int R=pos[i];
rep(j,,k)
{
L=le[L];
if(L>)
del(L);
R=ri[R];
if(R<=n)
del(R); } del(pos[i]);
d=-d;
}
puts(ans+);
return ;
}

然后对上面进行调试也AC了

原来真wa点是ri数组QAQ!!!

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 200000+5
int n,k;
int a[N];
int pos[N];
char ans[N];
int le[N];
int ri[N];
int d=; void del(int x)
{
ans[x]=d+'';
int L=le[x];
int R=ri[x];
le[R]=L;
ri[L]=R;
} int main()
{
RII(n,k);
rep(i,,n)
{
RI(a[i]);
pos[ a[i] ]=i;
le[i]=i-;
ri[i]=i+;
}
ri[n+]=n+;
repp(i,n,)
{
if( ans[ pos[i] ] )continue; del(pos[i]);
int L=pos[i];
int R=pos[i];
rep(j,,k)
{
L=le[L];
if(L>=)del(L);
R=ri[R];
if(R<=n)del(R);
}
d=-d;
}
puts(ans+);
return ;
}

CF552 E. Two Teams的更多相关文章

  1. Rnadom Teams

    Rnadom  Teams 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.actioncid=88890#problem/B 题目: Descript ...

  2. URAL 1208 Legendary Teams Contest(DFS)

    Legendary Teams Contest Time limit: 1.0 secondMemory limit: 64 MB Nothing makes as old as years. A l ...

  3. timus 1106 Two Teams(二部图)

    Two Teams Time limit: 1.0 secondMemory limit: 64 MB The group of people consists of N members. Every ...

  4. CF478 B. Random Teams 组合数学 简单题

    n participants of the competition were split into m teams in some manner so that each team has at le ...

  5. UVA 11609 Teams 组合数学+快速幂

    In a galaxy far far away there is an ancient game played among the planets. The specialty of the gam ...

  6. SCAU 07校赛 10317 Fans of Footbal Teams

    10317 Fans of Footbal Teams 时间限制:1000MS  内存限制:65535K 题型: 编程题   语言: 无限制 Description Two famous footba ...

  7. "is not on any development teams " Xcode的账号错误问题

    "***@*** is not on any development teams " Xcode现在在"Accounts"中时不时会出现这个提示. 但其他按钮都 ...

  8. cf478B Random Teams

    B. Random Teams time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  9. uva 10911 - Forming Quiz Teams(记忆化搜索)

    题目链接:10911 - Forming Quiz Teams 题目大意:给出2 * n个选手的坐标, 要求将所有的选手分成n组, 每组两个人, 所有组的两个人之间的距离之和要最小, 输出最小值. 解 ...

随机推荐

  1. PHP--php时间差8个小时的问题

    自PHP5.0开始,用PHP获取系统时间时,时间比当前时间少8个小时.原因是PHP.ini中没有设置timezone时,PHP是使用的UTC时间,所以在中国时间要少8小时. 解决办法: 1.在PHP. ...

  2. 安装elasticsearch 5.x, 6.x 常见问题(坑)的解决

    本人在elasticsearch 5.x, 6.x 安装过程中遇到了一些问题: 警告提示 [2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] una ...

  3. JAVA覆写Request过滤XSS跨站脚本攻击

    注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...

  4. jquery 获取和设置 select下拉框的值

    获取Select : 获取select 选中的 text : $("#ddlRegType").find("option:selected").text(); ...

  5. Laravel 项目中编写第一个 Vue 组件

    和 CSS 框架一样,Laravel 不强制你使用什么 JavaScript 客户端框架,但是开箱对 Vue.js 提供了良好的支持,如果你更熟悉 React 的话,也可以将默认的脚手架代码替换成 R ...

  6. python(2): If/for/函数/try异常/调试/格式输出%

    (一) if  if a1==a2: print('ok') if:  else: if: elif: ... else:  注意缩进 猜数字游戏 from random import randint ...

  7. python之路第二天

    为何要有操作系统 为了让程序员更轻松的完成命令电脑工作而存在的,控制硬件,服务于软件. 操作系统的位置 操作系统位于软件和硬件之间.操作系统由内核(运行于内核态,控制硬件)和系统调用(运行于用户态,为 ...

  8. C++中explicit关键字的作用 (转)

    explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: class things { ...

  9. MyBatis - 2.全局文件配置

    1.properties 属性 <!--properties 引入外部配置文件 properties 的内容 resource: 引入类路径资源 url: 引入网络资源 --> <p ...

  10. Linux下Nginx安装/启动/重启/停止

    Nginx是高性能的web服务器也是非常好用反向代理服务器,可以实现负载均衡,动静分离等策略,在linux下用的非常多.下面是下载地址   http://nginx.org/en/download.h ...