bzoj 3877: [Ahoi2014]保龄球
Description
【故事背景】
Input
第一行包含一个整数N,表示保龄球比赛所需要进行的轮数。
Output
输出一行一个整数,表示JYY最大可能得到的分数。
Sample Input
5 2
10 0
3 7
Sample Output
HINT
【样例说明】
#include<cstdio>
#include<algorithm>
using namespace std;
struct score
{int x,y;int s;
}a[10001],b[10001],c[10001],d[10001],ax[10001],tt[10001];
inline bool cmp1(score x,score y)
{if(x.s>y.s)return true;if(x.s==y.s&&x.x>y.x)return true;return false;
}
inline bool cmp2(score x,score y)
{if(x.x>y.x)return true;return false;
}
int main()
{
// freopen("bowling.in","r",stdin);
// freopen("bowling.out","w",stdout);int n;scanf("%d",&n);int i;for(i=1;i<=n;i++){scanf("%d%d",&a[i].x,&a[i].y);a[i].s=a[i].x+a[i].y;}if(a[n].x!=10){sort(a+1,a+1+n,cmp1);int x1=0,x2=0,xt=n+1,xx1=0,xx2=0;for(i=1;i<=n;i++){if(a[i].x==10){x1++;b[x1]=a[i];}else if(a[i].s==10){x2++;c[x2]=a[i];}else{xt=i;break;}}int x3=0;for(i=xt;i<=n;i++){x3++;d[x3]=a[i];}xx1=x1;xx2=x2;int ans=0;int as=0;if(x2>0){as++;ax[as]=c[x2];x2--;ans+=10;//ax[as]=a[xt-(xx2-x2)];}while(x2>0&&x1>0){as++;ax[as].x=10;ax[as].y=0;ax[as].s=10;as++;//ax[as]=a[xt-(xx2-x2)];ax[as]=c[x2];x1--;x2--;ans+=40;}if(x2>0){sort(d+1,d+1+x3,cmp2);//sort(c+1,c+1+x2,cmp2);int d2=1,d2r=x2,d3=1,d3r=x3;bool flag=true;while(d2r-d2+1>0&&d3r-d3+1>0){if(flag){if(c[d2].x>d[d3].x||d3r-d3+1==1){as++;ax[as]=c[d2];ans+=(c[d2].x*2+c[d2].y);d2++;}else{as++;ax[as]=d[d3];ans+=(d[d3].x*2+d[d3].y);d3++;flag=false;}}else{as++;ax[as]=c[d2r];ans+=(c[d2r].x+c[d2r].y);d2r--;flag=true;}}if(d2r-d2+1>0){if(flag){as++;ax[as]=c[d2];ans+=(c[d2].x*2+c[d2].y);d2++;}while(d2r-d2+1>0){as++;ax[as]=c[d2];ans+=(c[d2].x+c[d2].y);d2++;}}else if(d3r-d3+1>0){if(flag){as++;ax[as]=d[d3];ans+=(d[d3].x*2+d[d3].y);d3++;flag=false;}while(d3r-d3+1>0){as++;ax[as]=d[d3];ans+=(d[d3].x+d[d3].y);d3++;}}int ansx=ans;int j;for(i=as;i>=1;i--)if(ax[i].s==10)break;int tx=i;for(i=1;i<=as;i++){if(ax[i].x==10){score t=ax[i];ax[i]=ax[tx];ax[tx]=t;ans=0;bool flag1=false,flag2=false;for(j=1;j<=as;j++){if(flag1)ans+=(ax[j].s*2);else if(flag2)ans+=(ax[j].x*2+ax[j].y);elseans+=(ax[j].x+ax[j].y);flag1=false;flag2=false;if(ax[j].x==10)flag1=true;else if(ax[j].s==10)flag2=true;}ansx=max(ansx,ans);t=ax[i];ax[i]=ax[tx];ax[tx]=t;}}printf("%d\n",ansx);}else if(x1>0){if(xx2==0)ans-=10;while(x1>0){ans+=20;x1--;}ans+=(a[xt].s*2);for(i=xt+1;i<=n;i++)ans+=a[xt].s;printf("%d\n",ans);}}else{for(i=1;i<=n;i++)tt[i]=a[i];scanf("%d%d",&tt[n+1].x,&tt[n+1].y);tt[n+1].s=tt[n+1].x+tt[n+1].y;int j,k;int xx;int ansx=0;for(k=1;k<=n+1;k++){xx=0;for(j=1;j<=n+1;j++){if(j!=k){xx++;a[xx]=tt[j];}}/* printf("\n");for(j=1;j<=n;j++)printf("%d %d %d\n",a[j].x,a[j].y,a[j].s);printf("\n");*/ax[n+1]=tt[k];sort(a+1,a+1+n,cmp1);int x1=0,x2=0,xt=n+1,xx1=0,xx2=0;for(i=1;i<=n;i++){if(a[i].x==10){x1++;b[x1]=a[i];}else if(a[i].s==10){x2++;c[x2]=a[i];}else{xt=i;break;}}int x3=0;for(i=xt;i<=n;i++){x3++;d[x3]=a[i];}xx1=x1;xx2=x2;int ans=0;int as=n+1;if(x1>0){as--;ax[as]=b[x1];x1--;//ax[as]=a[xt-(xx2-x2)];}elsecontinue;while(x2>0&&x1>0){as--;//ax[as]=a[xt-(xx2-x2)];ax[as]=c[x2];as--;ax[as].x=10;ax[as].y=0;ax[as].s=10;x1--;x2--;}if(x2>0){//----------------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------------sort(d+1,d+1+x3,cmp2);int d2=1,d2r=x2,d3=1,d3r=x3;bool flag=true;while(d2r-d2+1>0&&d3r-d3+1>0){if(flag){as--;ax[as]=c[d2r];d2r--;flag=false;}else{/* //if(d[d3].x>ax[as].x)if(d[d3].x*2+ax[as].x>=c[d2].x+ax[as].x*2||d2r-d2+1==1&&d[d3].x>ax[as].x){as--;ax[as]=d[d3];d3++;flag=true;}else{as--;ax[as]=c[d2];d2++;}*/if(d2r-d2+1==1){if(d[d3].x>ax[as].x){as--;ax[as]=d[d3];d3++;flag=true;}else{as--;ax[as]=c[d2];d2++;}}else{if(d[d3].x>ax[as].x){as--;ax[as]=d[d3];d3++;flag=true;}else{as--;ax[as]=c[d2];d2++;}}}}if(d2r-d2+1>0){while(d2r-d2+1>0){as--;ax[as]=c[d2];d2++;}}else if(d3r-d3+1>0){while(d3r-d3+1>0){as--;ax[as]=d[d3];d3++;}}bool flag1=false,flag2=false;ans=0;for(j=1;j<=n+1;j++){if(flag1)ans+=(ax[j].s*2);else if(flag2)ans+=(ax[j].x*2+ax[j].y);elseans+=(ax[j].x+ax[j].y);flag1=false;flag2=false;if(ax[j].x==10)flag1=true;else if(ax[j].s==10)flag2=true;}ansx=max(ansx,ans);int j;for(i=1;i<=n-1;i++)if(ax[i].s==10)break;//int tx=i;for(int tx=1;tx<=n-1;tx++){for(i=n-1;i>=1;i--){// if(ax[i].x==10)// {score t=ax[i];ax[i]=ax[tx];ax[tx]=t;ans=0;bool flag1=false,flag2=false;for(j=1;j<=n+1;j++){if(flag1)ans+=(ax[j].s*2);else if(flag2)ans+=(ax[j].x*2+ax[j].y);elseans+=(ax[j].x+ax[j].y);flag1=false;flag2=false;if(ax[j].x==10)flag1=true;else if(ax[j].s==10)flag2=true;}ansx=max(ansx,ans);t=ax[i];ax[i]=ax[tx];ax[tx]=t;// }}}//----------------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------------}else if(x1>0){while(x1>0){as--;ax[as].x=10;ax[as].y=0;ax[as].s=10;x1--;}for(i=xt;i<=n;i++){as--;ax[as]=a[i];}bool flag1=false,flag2=false;ans=0;/* printf("\n");for(j=1;j<=n+1;j++)printf("%d %d %d\n",ax[j].x,ax[j].y,ax[j].s);printf("\n");*/for(j=1;j<=n+1;j++){if(flag1)ans+=(ax[j].s*2);else if(flag2)ans+=(ax[j].x*2+ax[j].y);elseans+=(ax[j].x+ax[j].y);flag1=false;flag2=false;if(ax[j].x==10)flag1=true;else if(ax[j].s==10)flag2=true;}ansx=max(ansx,ans);}}printf("%d\n",ansx);}return 0;
}
至此JSOI2014第二轮题目全部补全完毕
bzoj 3877: [Ahoi2014]保龄球相关推荐
- 有下界的最小费用可行流2.0(bzoj 3876: [Ahoi2014]支线剧情)
什么是有下界的最小费用可行流? 平时来讲都是最小费用最大流,也就是在满流的前提条件下费用尽可能的少,而最小费用可行流一般不要求满流,但是每条边都有最小流量要求(比如经过边e(u,v)的流量不能少于4等 ...
- BZOJ 3875 Ahoi2014 骑士游戏
3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec Memory Limit: 256 MB Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款 ...
- BZOJ 3876 AHOI2014 支线剧情 费用流
题目大意:给定一张拓扑图,每条边有边权,每次只能从第一个点出发沿着拓扑图走一条路径,求遍历所有边所需要的最小边权和 有下界有源汇的最小费用流 裸的... 建图如下: 对于每一条边权为z的边x-> ...
- BZOJ 3875 Ahoi2014 骑士游戏 SPFA
题目大意:给定n个怪物,每个怪物可以用魔法直接干掉,或者用物理攻击使其分裂为一些其他怪物,求杀掉1号怪物的最小花销 令f[i]为杀死i号怪物的最小花销,则f[i]=min(k[i],s[i]+Σf[j ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- BZOJ 2957楼房重建
传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...
最新文章
- 2 datax mysql 和 mysql之间相互导入
- 使用Nomad构建弹性基础架构: 作业生命周期
- 回顾2019年5个重大宕机事件
- bzoj 3747: [POI2015]Kinoman
- 活动服务器优化 暂时关闭,服务器优化之关闭不必要的服务
- android listpreference 自定义,android ListPreference 不显示内容 设置默认值
- centos 安装qrcode 二维码
- hdu 2795 Billboard
- oracle中求商函数,三个方便实用的Oracle分析函数
- 解决无线路由器无法进行账号认证上网的问题
- 菲律宾php是啥,投资菲律宾马尼拉房产的本质是什么?
- Captura录屏没有声音解决方法
- 菜鸟的Springboot学习日历(一)
- 阿里云和腾讯云对比哪家好?云服务器哪个速度快?各有什么优势?
- CS5213 HDMI转VGA带音频DAC输出|HDMI to VGA withDAC转换
- 莫以物喜 、莫以己悲!
- 如何安装Ubuntu 20.04 LTS服务器的图文教程
- PCIe ARI (Alternative Routing-ID Interpretation)介绍
- 二维火收银显示服务器超时怎么办,配件连接及后台设置二维火服务中心.pdf
- log.io:浏览器端实时日志监管系统
热门文章
- 可以录制手机尺寸的录屏软件有哪些?
- 乐博乐博机器人上课安排_乐博乐博机器人:校管家是学校经营管理的根基
- 人工智能大作业——A*算法迷宫寻路问题
- 将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方
- 小米电视3 android,小米3代/小米电视今日发布!-小米3代,5寸,1080p,Tegra 4,骁龙800,小米电视,47寸, ——快科技(驱动之家旗下媒体)--科技改变未来...
- 天天酷跑java_利用Java怎么实现一个天天酷跑游戏
- pg数据库删除重复项
- 云服务器代理_虚拟主机代理_服务器代理-谈谈IDC加盟合作那些事!
- 212:Python学习之爬虫篇——用Json方法爬取某音乐网站任意歌手的歌单
- 使用AT命令获取本机号码