题意:给出一串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. pyhon 前面补充和set

    一, 主要内容. 补充一个字符串的基本操作 li = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"] s = ...

  2. 最新手机号码验证正则表达式(PHP版本)

    1 前言 手机号码是否合规,则需要校验,可以使用正则表达式. 2 代码 function checkPhoneNumberValidate($phone_number){ //@2017-11-25 ...

  3. hive学习02-累加

    求出当月的访问次数,截至当月前的每个月最大访问次数.截至当月前每个用户总的访问次数. 数据表如下 A,-, A,-, B,-, A,-, B,-, A,-, A,-, A,-, B,-, B,-, A ...

  4. a href=#与 a href=javascript:void(0) 的区别(转)

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...

  5. Confluence 6 数据库字符集编码和问题

    数据库字符集编码 你的数据库和 JDBC 数据源连接必须配置为使用 UTF-8 编码(或者根据你配置的数据库来制定正确的 UTF-8 编码字符集,例如在 Oracle 中使用的是 AL32UTF8 ) ...

  6. verilog 异步复位代码

    module reset_sync (input clk, input reset_in, output reset_out); (* ASYNC_REG = 'b1; (* ASYNC_REG = ...

  7. AXI Traffic Generator 生成axi-lite axi4 axis 的IP

    addr.coe memory_initialization_radix = ; memory_initialization_vector = ,,,,,,,,ffffffff; ctrl.coe m ...

  8. Python实操

    有两个列表,分别存放报名学习linux和python课程的学生名字 linux=['钢弹','小壁虎','小虎比','alex','wupeiqi','yuanhao'] python=['drago ...

  9. laravel zh-CN

    位置: 调用:

  10. eclipse创建动态maven项目

    需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...