TDL的YC牌

传说中的置换群?反正不懂。我的思路竟然是对的,可是为何只有20分?

(1)尼玛每行数据输出后回车不打!

(2)写gcd函数脑残把a mod b写成a-b,大大减慢速度…

(3)看标程才想到用快速幂,第一次知道置换也可以快速幂。

(4)大小姐啊麻烦你下次看数据范围别把0的个数给数错的……

果然什么题都要见识一下。跑数据的时候速度仍然堪忧(最后三个点),可能是电脑问题,也可能还能优化?

program yc;
const maxn=+;
q=1e-6;
var t1,t2,t3,jn,p:int64;
tt3:real;
a,b,c,d,base,baset,ans,anst:array[..maxn] of longint;
i,t,n,jt,x,k,j:longint;
function gcd(a,b:int64):integer;
var t:int64;
begin
if b>a then
begin
t:=a;a:=b;b:=t;
end;
if (a=) or (b=) then exit();
if a mod b= then gcd:=b else gcd:=gcd(b,a mod b);
end; function eq(a:real;b:int64):boolean;
begin
if abs(a-b)<=q then exit(true) else exit(false);
end; begin
assign(input,'yc10.in');reset(input);
assign(output,'yc10.out');rewrite(output);
readln(t);
for i:= to t do
begin
readln(n,t1,t2);
jn:=;
for j:= to n do
read(b[j]);
for j:= to n do
begin
jt:=;x:=b[j];
while x<>j do
begin
x:=b[x];
inc(jt);
end;
jn:=jn div gcd(jn,jt) * jt;
end;
{for j:=1 to n do a[j]:=j;
fillchar(jp,sizeof(jp),$7f);
c:=a;
for j:=1 to 30 do
begin
for k:=1 to n do
d[k]:=c[b[k]];
c:=d;
for k:=1 to n do
if (a[k]=d[k]) and (k<jp[k]) then jp[k]:=j;
end;}
{for j:=1 to n do
jn:=jn*jt div gcd(jn,jt); }
for k:=-t2 to t2 do
begin
tt3:=(t1+k*jn)/t2;
if (eq(tt3,round(tt3))) and (tt3>) then break;
end;
t3:=round(tt3);
for j:= to n do
a[j]:=j;
for j:= to n do ans[j]:=j;
for j:= to n do anst[j]:=j;
for j:= to n do base[j]:=b[j];
p:=t3;
while p> do
//for p:= to t3 do
begin
{for k:=1 to n do
begin
//c[k]:=b[a[k]];
c[b[k]]:=a[k];
end;
a:=c;
inc(p);}
if p mod = then
for j:= to n do anst[j]:=ans[base[j]];
ans:=anst;
for j:= to n do baset[j]:=base[base[j]];
base:=baset;
p:=p div ;
end;
{for j:=1 to n do
c[a[j]]:=j;}
for j:= to n do
write(ans[j],' ');
writeln;
end;
close(input);close(output);
end.

yc

TDL的幼儿园

昨天又4个人AC,果然我是弱渣,根本看不出这是网络流模型- -!今天学习了Dinic算法,为何感觉比之前写的更简短且容易理解?(咳咳之前那次写的手工栈)

对题目进行网络流建模,源点(编号0)向每个小朋友连一条边,容量为Ci,所有糖向汇点(编号m+n+1)连一条边,容量为Vi,小朋友和它想要的糖之间连一条容量为inf的边。(要注意inf最好不要设置成maxlongint,否则万一它的flow为负,两者一加就超过范围了,结果坑爹的Lazarus还不报错,传进去一个接近-maxlongint的值,当然这有可能是初始化一开始出错造成的。最后我inf设置成了maxlongint div 2)

P.S. 题解要不要写的那么暴力啊,一会儿割小朋友,一会儿把它的所有的糖给割掉…

跟踪了一些变量来搞懂,没有时间把它搞精通了,所以默默地背代码去了。

话说,我100年没有写链表了!…貌似,这次写的还比较顺…

程序很大程度参考了http://www.cnblogs.com/htfy/archive/2012/02/15/2353147.html,我没有用静态链表,所以没写xor 1这种办法,用了dec_flow这样一个查找+修改flow的过程。

一开始跑数据死循环啊!尼玛建边的时候下次注意一点,这次建双向边但是回边的flow是0,不能和去边一样啊 =v=

program kd2;
type ptype=^node;
node=record
w,v,flow:longint;
next:ptype;
end;
const inf=maxlongint div ;
maxn=;
var n,m,tar,sta,v,c,x,cn,i,j:longint;
head:array[..*maxn+] of ptype;
visit:array[..*maxn+] of boolean;
d,q:array[..*maxn+] of longint;// distance to st; function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end; procedure add_edge(st,ed,w:longint);
var p,q,pre:ptype;
begin
new(q);
q:=head[st];
new(p);
p^.w:=w;p^.v:=ed;p^.flow:=;p^.next:=nil;
if q=nil then
begin
new(head[st]);
head[st]^:=p^;
end
else
begin
while q<>nil do
begin
pre:=q;
q:=q^.next;
end;
new(q);
q^:=p^;
pre^.next:=q;
end;
end; function bfs:boolean;
var star,rear,x,u:longint;
y:ptype;
begin
fillchar(visit,sizeof(visit),false);
fillchar(q,sizeof(q),);
star:=;rear:=;d[sta]:=;visit[sta]:=true;q[star]:=sta;
while star<=rear do
begin
x:=q[star];
y:=head[x];
while y<>nil do
begin
if (not visit[y^.v]) and (y^.flow<y^.w) then
begin
visit[y^.v]:=true;
d[y^.v]:=d[x]+;
inc(rear);
q[rear]:=y^.v;
end;
y:=y^.next;
end;
inc(star);
end;
exit(visit[tar]);
end; procedure dec_flow(st,ed,delta:longint);
var x:ptype;
begin
x:=head[st];
while x^.v<>ed do x:=x^.next;
x^.flow:=x^.flow-delta;
end; function add_flow(p,maxflow:longint):longint;
var u,o:longint;
y:ptype;
begin
if (p=tar) or (maxflow=) then exit(maxflow);
add_flow:=;
y:=head[p];
while y<>nil do
begin
if (d[y^.v]=d[p]+) and (y^.flow<y^.w) then
begin
o:=add_flow(y^.v,min(maxflow,y^.w-y^.flow));
if o> then
begin
inc(y^.flow,o);
//dec(op_y.flow,o);
dec_flow(y^.v,p,o);
dec(maxflow,o);inc(add_flow,o);
if maxflow= then break;
end;
end;
y:=y^.next;
end;
end; function network:longint;
begin
network:=;
while bfs do
begin
inc(network,add_flow(sta,inf));
end;
end; begin
assign(input,'kd.in');reset(input);
assign(output,'kd.out');rewrite(output);
readln(n,m);sta:=;tar:=m+n+;
for i:= to m do
begin
read(v);
add_edge(n+i,tar,v);
add_edge(tar,n+i,);
end;
for i:= to n do
begin
read(c);
cn:=cn+c;
add_edge(sta,i,c);
add_edge(i,sta,);
read(x);
for j:= to x do
begin
read(c);
add_edge(i,n+c,inf);
add_edge(n+c,i,);
end;
readln;
end;
writeln(cn-network);
end.

kd

[TD Cup 2014] TDL的YC牌 & TDL的幼儿园的更多相关文章

  1. Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告

    Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...

  2. Facebook Hacker Cup 2014 Qualification Round

    2014 Qualification Round Solutions 2013年11月25日下午 1:34 ...最简单的一题又有bug...自以为是真是很厉害! 1. Square Detector ...

  3. 【点分治】Osipovsky Cup 2014 Kovrov, Sunday, December 21, 2014 Problem A. Attack and Defence

    题意:给你一棵树,每个点有一个左括号或者右括号,问你树上能够完美匹配的路径数量(l->r,r->l 视作不同路径). 点分治可以使用“不扣去重复答案”的写法,只不过,要先将每个点的子树按照 ...

  4. Transferring Data Between ASP.NET Web Pages

    14 July 2012 20:24 http://www.mikesdotnetting.com/article/192/transferring-data-between-asp-net-web- ...

  5. JavaScript 获取客户端计算机硬件及系统信息

    1.浏览器信息 //浏览器信息 function BrowserInfo() { var userLanguage = navigator.userLanguage;     // 用户在自己的操作系 ...

  6. JS获取客户端电脑信息(转)

    <html> <head> <title></title> <script type="text/javascript"> ...

  7. Python in minute

    Python 性能优化相关专题:    https://www.ibm.com/developerworks/cn/linux/l-cn-python-optim/   Python wikipedi ...

  8. JavaScript获取浏览器版本等信息

    ** 不同浏览器版本可能存在差异,使用时请测试自己的环境 ** 测试时各个浏览器版本 IE: 11.953.14393.0 Edge: Microsoft Edge 38.14393.0.0;Micr ...

  9. 表格布局----基于bootstrap样式 布局

    在实际开发中,我们通过菜鸟教程复制的表格往往不能满足我们的开发需求,样式很难看,而且不能自适应,尤其是需要到处Excel的样式,感觉非常糟糕,这次我就写了一个表单,不足之处,希望大神们多多指教: 代码 ...

随机推荐

  1. 17. 星际争霸之php设计模式--职责链模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. 前端开发--css属性书写顺序

    css属性顺序是css良好编码风格的一部分,有助于提高代码可读性,便于发现代码问题,有利于团队合作.(依次排后) example { /*显示属性*/ display: ; visibility: ; ...

  3. 解决jQuery ajax跨域问题,Google、IE、Firefox亲测有效

    直接上最后的结果吧 JS: $.ajax({ type: "GET", async: false, crossDomain: true, url: "www.test.c ...

  4. TCP IP详解(转)

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 网络七层协议简称OSI.TCP/IP刨除了物理层,并把上三层(会话层.表示层和应用层)统称 ...

  5. SourceTree 免登录跳过初始设置

    SourceTree 安装之后需要使用账号登陆以授权,以前是可以不登陆的,但是现在是强制登陆. 虽然是免费授权,但是碰上不可抗力因素,登陆不是很方便,这里记录一下跳过这个初始化的步骤. 安装之后,转到 ...

  6. 2015年江西理工大学C语言程序设计竞赛(高级组)

    A 解法:DP+二分 dp[i]=max(dp[i],dp[j]+p[i].v)(i>j) dp[i]表示建立i点之后能够获得的最大值 int n,M; struct node { int l, ...

  7. R----dplyr包介绍学习

    dplyr包:plyr包的替代者,专门面对数据框,将ddplyr转变为更易用的接口 %>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以 ...

  8. Zookeeper第一课 安装和配置

    简介: Zookeeper,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,来实现同步.配置维护.分集群.命名的服务. zookeeper是一个由多 ...

  9. D3.js 更自由的条形图

    一.添加一个矩形 //Width and height var w = 500; var h = 100; var dataset = [ 5, 10, 13, 19, 21, 25, 22, 18, ...

  10. IntelliJ IDEA 设置代码提示或自动补全的快捷键

    IntelliJ IDEA 设置代码提示或自动补全的快捷键   点击 文件菜单(File) –> 点击 设置(Settings- Ctrl+Alt+S), –> 打开设置对话框. 在左侧的 ...