第一题

题意:给定n*m网络,定义两个棋子在同行同列则相互攻击,同时要求两个棋子的行和列不能一小一大,求满足条件的最大摆放的方案数。

题解:ans=C(max(n,m),min(n,m)),就是在max中取min个数字的组合,组合内排序构成一种方案。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
/*------------------------------------------------------------*/
const int inf=0x3f3f3f3f,MOD=;
void gcd(ll a,ll b,ll& d,ll& x,ll& y)
{
if(!b){d=a;x=;y=;}
else{gcd(b,a%b,d,y,x);y-=x*(a/b);}
}
ll inv(ll a,ll n)
{
ll d,x,y;
gcd(a,n,d,x,y);
return (x%n+n)%n;
}
ll n,fac[],fav[]; int main()
{
ll T,n,m;
scanf("%lld",&T);
fac[]=;fav[]=;
for(int i=;i<=;i++)fac[i]=fac[i-]*i%MOD;
for(int i=;i<=;i++)fav[i]=inv(fac[i],MOD);
for(int i=;i<=T;i++){
scanf("%lld%lld",&n,&m);
int mins=min(n,m);
int maxs=max(n,m);
printf("%lld\n",fac[maxs]*fav[mins]%MOD*fav[maxs-mins]%MOD);
}
return ;
}

第二题

第三题

第四题

第五题

最小费用流(不要求最大流),不用拆点,S向每个点连边生产,每个点向T连边销售,点与点之间连无向边运输。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
/*------------------------------------------------------------*/
const int inf=0x3f3f3f3f,maxn=;
struct edge{int from,v,flow,cost;}e[];
int n,m,first[maxn],d[maxn],cur[maxn],ans,S,T,tot=,q[];
bool vis[maxn];
void insert(int u,int v,int flow,int cost)
{
tot++;e[tot].v=v;e[tot].flow=flow;e[tot].cost=cost;e[tot].from=first[u];first[u]=tot;
tot++;e[tot].v=u;e[tot].flow=;e[tot].cost=-cost;e[tot].from=first[v];first[v]=tot;
}
bool spfa()
{
memset(vis,,sizeof(vis));
memset(d,0x3f,sizeof(d));
int head=,tail=;q[]=T;vis[T]=;d[T]=;
while(head!=tail)
{
int x=q[head++];if(head>)head=;
for(int i=first[x];i;i=e[i].from)
if(e[i^].flow&&d[x]+e[i^].cost<d[e[i].v])
{
int y=e[i].v;
d[y]=d[x]+e[i^].cost;
if(!vis[y])
{
if(d[y]<d[q[head]]){head--;if(head<)head=;q[head]=y;}
else{q[tail++]=y;if(tail>)tail=;}
vis[y]=;
}
}
vis[x]=;
}
return d[S]<;
}
int dfs(int x,int a)
{
if(x==T||a==)return a;
vis[x]=;
int flow=,f;
for(int& i=cur[x];i;i=e[i].from)
if(!vis[e[i].v]&&d[x]==e[i].cost+d[e[i].v]&&(f=dfs(e[i].v,min(a,e[i].flow)))>)
{
e[i].flow-=f;
e[i^].flow+=f;
ans+=e[i].cost*f;
flow+=f;
a-=f;
if(a==)break;
}
vis[x]=;
return flow;
}
int main()
{
while(scanf("%d%d",&n,&m)==){
S=;T=n+;
int a1,b1,c1,d1,u1,v1,k1;
tot=;
memset(first,,sizeof(first));
for(int i=;i<=n;i++){
a1=read();b1=read();c1=read();d1=read();
insert(S,i,b1,a1);
insert(i,T,d1,-c1);
}
for(int i=;i<=m;i++){
u1=read();v1=read();k1=read();
if(u1==v1)continue;
insert(u1,v1,inf,k1);
insert(v1,u1,inf,k1);
}
ans=;
memset(vis,,sizeof(vis));
while(spfa())
{
for(int i=S;i<=T;i++)cur[i]=first[i];
dfs(S,inf);
}
printf("%d\n",-ans);
}
return ;
}

第六题

题意:在无限的数轴上,给定n个区间,补充m个点使最长连续区间最长。n<=10^5。

题解:

区间左闭右开的好处:区间内距离和区间间距离直接计算,两区间左右端点重合就紧贴。

经典区间交问题:左闭右开,按左端点排序,分类讨论三种情况:

1.右端点<=R,包含。

2.右端点>R,左端点<=R,相交。

3.右端点>R,左端点>R,不相交。

(另一种思路,左+1右-1,排序后前缀和为0时加入一个区间。)

处理成若干个独立区间后,对于每个l计算出能延伸出最远的r,经典的双指针位移问题,多余的补充点直接加入答案。

双指针位移:for左端点,每次扩展右端点到极限。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=; int n,m;
struct cyc{int l,r;}a[maxn],b[maxn]; bool cmp(cyc a,cyc b){return a.l<b.l;} int main(){
while(scanf("%d%d",&n,&m)==){
for(int i=;i<=n;i++){scanf("%d%d",&a[i].l,&a[i].r);a[i].r++;}
sort(a+,a+n+,cmp);
int L=a[].l,R=a[].r,tot=;
for(int i=;i<=n;i++){
if(a[i].r<=R)continue;
if(a[i].r>R&&a[i].l<=R)R=a[i].r;
else{b[++tot]=(cyc){L,R};L=a[i].l;R=a[i].r;}
}
b[++tot]=(cyc){L,R};
n=tot;
int j=,leave=m,ans=;
for(int i=;i<=n;i++){
while(j+<=n&&leave-(b[j+].l-b[j].r)>=){
leave-=b[j+].l-b[j].r;
j++;
}
ans=max(ans,b[j].r-b[i].l+leave);
leave+=b[i+].l-b[i].r;
if(i==j){j=i+;leave=m;}
}
printf("%d\n",ans);
}
return ;
}

PS:进复赛啦>w<!

【比赛】百度之星2017 初赛Round B的更多相关文章

  1. 【比赛】百度之星2017 初赛Round A

    第一题 题意:给定多组数据P,每次询问P进制下,有多少数字B满足条件:只要数位之和是B的倍数,该数字就是B的倍数. 题解:此题是参考10进制下3和9倍数的特殊性质. 对于10进制,ab=10*a+b= ...

  2. 百度之星2017初赛A-1005-今夕何夕

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 百度之星2017初赛A轮 1001 小C的倍数问题

    小C的倍数问题 Accepts: 1990 Submissions: 4931 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...

  4. 百度之星2017初赛A-1006-度度熊的01世界

    度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...

  5. 百度之星2017初赛A

    雪崩,没晋级,补题 1001 分析:求n-1的约数个数 #include "iostream" #include "cstdio" #include " ...

  6. 百度之星2017初赛B1006 小小粉丝度度熊

    思路: 考虑到补签卡一定是连续放置才更优,所以直接根据起始位置枚举.预先处理区间之间的gap的前缀和,在枚举过程中二分即可.复杂度O(nlog(n)). 实现: #include <iostre ...

  7. 【百度之星2014~初赛(第二轮)解题报告】Chess

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载.可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  8. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  9. HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)

    p1m2  Accepts: 1003  Submissions: 4595  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072 ...

随机推荐

  1. js面向对象过程

    var a = new  b(); 等价于 var a={}; a=b.prototype; b.call(a);

  2. (干货分享)mac python+appium环境搭建

    因为mac本自带python2.x(不建议卸载,因为本本本身有很多依赖与此),所以装python3的过程极其坎坷,勉强装好后也总是各种报错.这次装appium环境,直接把原来的python3卸了,用h ...

  3. lua优化

    前言 Lua是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏.像<魔兽世界>的插件,手机游戏<大掌门><神曲><迷失之地>等都是用Lua来 ...

  4. Java并发基础--Thread类

    一.Thread类的构成 Thread类实现Runnable接口.部分源码如下: 二.Thread类常用方法 1.currentThread()方法 currentThread()方法可以返回代码段正 ...

  5. Laxcus大数据管理系统2.0 (1) - 摘要和目录

    Laxcus大数据管理系统 (version 2.0) Laxcus大数据实验室 摘要 Laxcus是Laxcus大数据实验室全体系全功能设计研发的多用户多集群大数据管理系统,支持一到百万台级节点,提 ...

  6. go 语言模拟百度登录

    1.参考网上Python的例子自己写了一个go语言的.这个仅供学习技术参考,为了方便有部分参数直接phantomjs执行js获取,代码基本都有注释,测试打印没有删除,还请见谅! 2.本文参考http: ...

  7. deeplearning.ai课程学习(3)

    第三周:浅层神经网络(Shallow neural networks) 1.激活函数(Activation functions) sigmoid函数和tanh函数两者共同的缺点是,在z特别大或者特别小 ...

  8. NO1——线段树

    /* 数组存储 */ /* 预处理 */ #include <iostream> #include <cstdio> #include <algorithm> #i ...

  9. 功能规格说明书Version2

    此功能规格说明书是Week8 功能规格说明书的第二个版本, 版本1地址:http://www.cnblogs.com/Z-XML/p/3407687.html 此功能规格说明书是面向用户的,所以作者将 ...

  10. 转---详细的Android开发环境搭建教程

    五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程 引言   在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立A ...