分析:

此题是小奔的方案的改进。小奔的方案思路:倒推,每次都从小到大排序并且保证小号在前,然后使每一个人分到的金币都是上一次加一,直到金币分完或者自己可以存活(投票率大于等于所需概率),如果不行就-1。 (即题目背景)

大奔的方案无非就是分两种情况:1.只讨好不是自己帮派的,那怕自己帮派成员都投反对票也能活下来。2.先讨好是自己帮派的(此时够了也要全部满足),然后如果不够就从小到大满足其他人。在这两种情况中选择一种(保证小号拿得多),就是答案。

代码:

(即使是Pascal,我也要排成c++的颜色

var
a,b,c,d,f,e:array[1..1000]of longint;
g:array[1..1000,1..1000]of boolean;
i,j,k1,k2,n,m,o,t,x,y,z:longint;
procedure zhx(p,q:longint);
var
i,j:longint;
s:real;
begin
i:=0;
s:=(o/100)*(q-p+1);
if trunc(s)<>s then s:=s+1;
j:=trunc(s);
for i:=p to q do if g[p,i] then begin dec(j); if p<>i then begin e[i]:=x; k2:=k2+x; end; end;
if j<=0 then exit;
i:=p;
while j>0 do
begin
inc(i);
if e[d[i]]<>0 then continue;
k2:=k2+b[i]+1;
e[d[i]]:=b[i]+1;
if e[d[p+i-1]]>m then e[d[p+i-1]]:=m;
dec(j);
end;
end;
procedure zx(p,q:longint);
var
i,j:longint;
begin
i:=0;
j:=0;
while (j/(q-p+1))<(o/100) do
begin
inc(i);
if i+p-1>q then begin k1:=maxlongint; exit; end;
if g[p,i+p-1] then continue;
inc(j);
k1:=k1+b[p+i-1]+1;
if i=1 then dec(k1);
a[d[p+i-1]]:=b[p+i-1]+1;
if a[d[p+i-1]]>m then a[d[p+i-1]]:=m;
end;
if (p+i-1)=q then exit;
for j:=p+i to q do a[d[j]]:=0;
end;
procedure qsort(l,r:longint);
var
i,j,mid,p,m1:longint;
begin
i:=l;j:=r;
mid:=b[(l+r) div 2];
m1:=d[(l+r) div 2];
repeat
while (b[i]<mid)or((b[i]=mid)and(d[i]<m1)) do inc(i);
while (b[j]>mid)or((b[j]=mid)and(d[j]>m1)) do dec(j);
if (i<=j) then
begin
p:=b[i]; b[i]:=b[j]; b[j]:=p;
p:=d[i]; d[i]:=d[j]; d[j]:=p;
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end;
begin
readln(n,m,o,t,x);
fillchar(f,sizeof(f),0);
fillchar(g,sizeof(g),false);
for i:=1 to t do
begin
readln(y,z);
if (f[y]<>0)and(f[z]<>0) then
begin
for j:=1 to n do if f[j]=f[z] then f[j]:=f[y];
continue;
end;
if (f[y]=0)and(f[z]=0) then begin f[y]:=y; f[z]:=f[y]; end
else begin f[y]:=f[z]+f[y]; f[z]:=f[y]; end;
end;
for i:=1 to n do for j:=1 to n do if (f[j]=f[i])and((f[j]<>0)or(i=j)) then g[i,j]:=true;
for i:=n downto 1 do
begin
c[i]:=i;
b:=a;
if i<>n then for j:=n downto i+1 do f[j]:=a[j];
d:=c;
k1:=0;
k2:=0;
if i<>n then qsort(i+1,n);
fillchar(a,sizeof(a),0);
fillchar(e,sizeof(e),0);
if i<>n then zx(i,n);
if i<>n then zhx(i,n);
e[i]:=m-k2;
a[i]:=m-k1;
j:=i;
while (e[j]=a[j])and(j<n) do inc(j);
if e[j]>a[j] then a:=e;
if a[i]<0 then
begin
for j:=n downto i+1 do a[j]:=f[j];
a[i]:=-1;
end;
end;
for i:=1 to n do write(a[i],' ');
end.

比赛:大奔的方案solution的更多相关文章

  1. 比赛:小奔的方案 solution

    题目 题目背景 有一个著名的题目: 五个海盗抢到了100个金币,每一颗都一样的大小和价值连城. 他们决定这么分: 1.抽签决定自己的号码 ------ [1.2.3.4.5] 2.首先,由1号提出分配 ...

  2. 比赛:小奔与不等四边形solution

    题目: 题目背景 有这样一道经典的数学题:已知一个四边形的边长是四个连续的正整数,求证这个四边形的面积的最大值不为整数.小奔轻松地证明了这个问题,现在问题来了,大奔要求小奔以最快的速度算出给定边长的四 ...

  3. Sqlserver 高并发和大数据存储方案

    Sqlserver 高并发和大数据存储方案 随着用户的日益递增,日活和峰值的暴涨,数据库处理性能面临着巨大的挑战.下面分享下对实际10万+峰值的平台的数据库优化方案.与大家一起讨论,互相学习提高!   ...

  4. tomcat中间件提交表单数据量过大警告处理方案

    http://www.bubuko.com/infodetail-976418.html http://www.cnblogs.com/yg_zhang/p/4248061.html tomcat中间 ...

  5. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  6. MySQL 大表优化方案(长文)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  7. 比赛:小奔的矩形solution

    分析: 交叉相乘,然后除以最大公因数(为了减少爆常数的可能性std做了两次,数据很大),得到的两个数相加减二就是答案 代码: var p,q,n,m,a,b,i:int64; begin readln ...

  8. 详解MySQL大表优化方案( 转)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  9. MySQL 大表优化方案探讨

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

随机推荐

  1. PING[ARC2]: Heartbeat failed to connect to standby 'gqtzdb_dg'. Error is 16047

    Data Guard搭建完毕之后,执行开启归档路径2,结果发现不同步, SQL> alter system set log_archive_dest_state_2=enable; 查看错误日志 ...

  2. Linux下如何查看高CPU占用率线程 专题

    Java 系统性能分析 命令 1. cpu分析 top , pidstat(sysstat) pid -p PID -t 1 10 vmstat 1 CPU上下文切换.运行队列.利用率 ps Hh - ...

  3. TThread类详解

    TThread是一个抽象类,可以创建几个独立的线程.类关系 TObject在一个多线程的应用程序中创建一个TThread的后子类代表一个线程.每一新子类的TThread对象的实例是一个新的线程.从TT ...

  4. 基于 libevent 开发的 C++ 11 高性能网络服务器 evpp(360的作品)

    evpp是一个基于libevent开发的现代化C++11高性能网络服务器,自带TCP/UDP/HTTP等协议的异步非阻塞式的服务器和客户端库. 特性: 现代版的C++11接口 非阻塞异步接口都是C++ ...

  5. Qt 5.8 for Device Creation(好多内容,包括虚拟机安装,静态编译)

    http://doc.qt.io/QtEnterpriseEmbedded/qt-configuration-tool.html http://doc.qt.io/QtEnterpriseEmbedd ...

  6. ubuntu QT开发环境(三种方法安装Qt4.8,其中apt-get方法安装QT库最简单)good

    方法一 QT4.8.0库+QT Creator 2.4.1 特别声明:此方法极其耗时间,看电脑性能了.配置configure可减少编译时间 1.下载Qt .进入网址http://qt.nokia.co ...

  7. Design Thinking Workshop @ Agile Tour 2013 Shanghai

    设计思维工作坊 上周日在2013年敏捷之旅上海站,引导分享了一个设计思维的工作坊.这个工作坊持续了3个小时.来篇流水账分享给大家. 我们的设计挑战是什么呢?左思右想,在准备设计挑战题目的时候纠结了好久 ...

  8. Hive 学习之路(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件emp.txt和dept.txt可以从本仓库的resources目录下载. 1.1 员工表 -- 建表语句 CREAT ...

  9. Enter passphrase

    提示“Enter passphrase for key /root/.ssh/id_rsa.pub”让输入私钥,可不论输与不输都不能直接登录 解决方法: 在本地执行: eval `ssh-agent` ...

  10. QDomDocument 读取和编辑xml文件

    Qt中几种操作xml的方式 流方式 sax方式 dom方式 初学时,我常常采用流方式读取xml,该方式简单直观,容易理解.之后遇到了需要修改xml并重新写回的情况,流方式就显得捉襟见肘了. sax方式 ...