[USACO精选] 第一章 数值计算
好不容易坑来了传说中的USACO精选,近100题我要是能做完就哈哈哈哈了…继今天学并查集连番受挫之后,决定写一写基础题。
#0 负二进制 2014-01-10
其实是想到就会做,不想到就不会做的题,数学渣渣在此,赶紧承认自己看了解题0 0……其实我自己对于负数的mod不是很熟…如果考场上出这种东西自己开个exam.pas弄几个mod负数div负数不就摸索出来了么…
(其实我最开始的想法是,按正数除,除出来一个2^(2k-1)的就当成(-2)^2k+(-2)^(2k-1))
program tyvj_p1022;
var a:array[..] of integer;
x,i,t:longint;
begin
readln(x);
if x= then
begin
writeln();
halt;
end;
t:=;
while x<> do
begin
inc(t);
a[t]:=x mod (-);
if a[t]< then
begin
a[t]:=a[t]+;
x:=x-;
end;
x:=x div (-);
end;
for i:=t downto do
write(a[i]);
end.
负二进制
#1 数的幂次 2014-01-10
一开始还脑残在想这题是不是不用快速幂啊纯模拟啊…结果,写的快速幂+高精度,自己的机器都超时运作了…话说这题被坑了,我拿到的题目上写着答案不超过15000个字符的,结果我201个好久还以为是integer太小了,开成了longint,后来直接qword了… 后来数组开50000就over了…
不写不知道一写吓一跳噜,写快速幂+高精度要注意:(1)高精度自乘(本程序中采用ti数组)不要一脑残就以为是2在自己乘啊!(2)高精度a[i+j]:=a[i+j-1] div 10啊不要一脑残直接inc(a[i+j])…程序可优化的空间就是,写了两段高精度乘,其实可以弄成两个参数而不要再写一遍的…
program cruel1;
var a,ti:array[..] of qword;
node:array[..] of boolean;
n,p,t,i,tn,t0:longint;
procedure work_self_times;
var c:array[..] of qword;
i,j,t:longint;
begin
fillchar(c,sizeof(c),);
for i:= to ti[] do
for j:= to ti[] do
begin
c[i+j-]:=c[i+j-]+ti[i]*ti[j];
if c[i+j-]> then
begin
c[i+j]:=c[i+j]+c[i+j-] div ;
c[i+j-]:=c[i+j-] mod ;
end;
end;
t:=*ti[];
while c[t]= do dec(t);
c[]:=t;
ti:=c;
end; procedure times;
var c:array[..] of qword;
i,j,t:longint;
begin
fillchar(c,sizeof(c),);
for i:= to a[] do
for j:= to ti[] do
begin
c[i+j-]:=c[i+j-]+a[i]*ti[j];
if c[i+j-]> then
begin
c[i+j]:=c[i+j]+c[i+j-] div ;
c[i+j-]:=c[i+j-] mod ;
end;
end;
t:=*ti[];
while c[t]= do dec(t);
c[]:=t;
a:=c;
end;
begin
readln(n,p);
t:=;
while p<> do
begin
if p mod = then node[t]:=true;
p:=p div ;
inc(t);
end;
fillchar(a,sizeof(a),); a[]:=; a[]:=;
fillchar(ti,sizeof(ti),);
t0:=;tn:=n;
while tn<> do
begin
ti[t0]:=tn mod ;
tn:=tn div ;
inc(t0);
end;
ti[]:=t0-;
for i:= to t do
begin
if node[i]=true then times;
work_self_times;
end;
t:=;
while a[t]= do dec(t);
for i:=t downto do
write(a[i]);
end.
数的幂次
#2 分数变小数 2014-01-11
又脑残去搜题解了,结果看到很多大神的博客都说这题神坑,我还以为这题有多么的奇葩… 其实就是除法啦,第一次出错后还莫名其妙想了个要写链表的方法…(那方法其实是错的,但是话说上一次写链表是不知道多少年前了,要练习一下。)
x是商,x0是余数(多余的,可以不用),mark标记余数是否出现过。output1用于无循环的小数的输出,output2用于循环小数的输出。
其实有点虚,目测了一下答案是对的,但是数据7和8实在太长了…
program usaco_;
var n,d,z,t,i:longint;
x,x0:array[..] of longint;
mark:array[..] of longint;
procedure output1;
var i:longint;
begin
for i:= to t do
write(x[i]);
halt;
end;
procedure output2(l,r:longint);
var i:longint;
begin
for i:= to t do
begin
if i=l+ then write('(');
write(x[i]);
if i=r then write(')');
end;
halt;
end; begin
readln(n,d);
z:=n div d;
n:=n mod d;
write(z,'.');
if n= then
begin
write('');
halt;
end;
t:=;
for i:= to do mark[i]:=-;
mark[n]:=;
while true do
begin
inc(t);
x0[t]:=n;
n:=n*;
x[t]:=n div d;
n:=n mod d;
if n= then output1;
if (mark[n]<>-) then
output2(mark[n],t)
else
mark[n]:=t;
end;
end.
分数变小数
#3 丑数 2014-01-12
之前有两个程序是失败的,两个都是枚举list中的数据而不是p中的素数,导致慢的要死,要知道k的范围是[1,100],n的范围是[1,100000]…第二个稍微加了个小优化,用p0记录以免重复乘。然后默默去看题解…(啊啊啊你怎么能这么不独立呢!)于是开始枚举素数,用p0记录。但是第12个数据点的n=100000貌似还是很慢,这题目前没找到到oj可以测评(没去找…),去网上拉了个题解复制下来看看貌似第12点都超级慢,那就先搁着吧,等我USACO的training做到Chapter 3了去提交一下就知道了…
BTW快排可以不用写,我拿到的翻译里面没写输入的时候是有序的所以我自作多情地写了一个… T T
最终的:
program usaco_;
var k,n,i,j,l,t,t0:dword;
p,p0:array[..] of longint;
list:array[..] of dword;
procedure qsort(l,r:longint);
var i,j,mid,t:longint;
begin
i:=l;j:=r;mid:=p[(l+r) div ];
repeat
while p[i]<mid do inc(i);
while p[j]>mid do dec(j);
if i<=j then
begin
t:=p[i];p[i]:=p[j];p[j]:=t;
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if j>l then qsort(l,j);
end; begin
readln(k,n);
for i:= to k do
read(p[i]);
qsort(,k);
list[]:=;
for i:= to n+ do
begin
t:=maxlongint;
for j:= to k do
begin
while p[j]*list[p0[j]]<=list[i-] do inc(p0[j]);
if p[j]*list[p0[j]]<t then t:=p[j]*list[p0[j]];
end;
list[i]:=t;
end;
writeln(list[n+]);
end.
丑数
前两个失败的:
program usaco_;
var k,n,i,j,t,t0:longint;
p:array[..] of longint;
list:array[..] of longint;
procedure qsort(l,r:longint);
var i,j,mid,t:longint;
begin
i:=l;j:=r;mid:=p[(l+r) div ];
repeat
while p[i]<mid do inc(i);
while p[j]>mid do dec(j);
if i<=j then
begin
t:=p[i];p[i]:=p[j];p[j]:=t;
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if j>l then qsort(l,j);
end; function search(start,xi:longint):longint;
var t,i:longint;
begin
for i:= to k do
if start*p[i]>xi then
begin
t:=start*p[i];
exit(t);
end;
end; begin
readln(k,n);
for i:= to k do
read(p[i]);
qsort(,k);
list[]:=;
for i:= to n+ do
begin
t:=maxlongint;
for j:= to i- do
begin
t0:=search(list[j],list[i-]);
if t0<t then t:=t0;
end;
list[i]:=t;
end;
writeln(list[n+]);
end.
丑数-demo1
program usaco_;
var k,n,i,j,t,t0:longint;
p:array[..] of longint;
list,p0:array[..] of longint;
procedure qsort(l,r:longint);
var i,j,mid,t:longint;
begin
i:=l;j:=r;mid:=p[(l+r) div ];
repeat
while p[i]<mid do inc(i);
while p[j]>mid do dec(j);
if i<=j then
begin
t:=p[i];p[i]:=p[j];p[j]:=t;
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if j>l then qsort(l,j);
end; function search(start,xi:longint):longint;
var t,i:longint;
begin
if p0[start]>xi then exit(p0[start]);
for i:= to k do
if list[start]*p[i]>xi then
begin
t:=list[start]*p[i];
p0[start]:=t;
exit(t);
end;
end; begin
readln(k,n);
for i:= to k do
read(p[i]);
qsort(,k);
list[]:=;
for i:= to n+ do
begin
t:=maxlongint;
for j:= to i- do
begin
t0:=search(j,list[i-]);
if t0<t then t:=t0;
end;
list[i]:=t;
end;
writeln(list[n+]);
end.
丑数-demo2
[USACO精选] 第一章 数值计算的更多相关文章
- 【USACO】第一章总结
做了大半个月,终于把第一章做完了 有的题遇到了不小的坎儿,看着网上一群高中生都做得那么好,心理还是有些小郁闷的.不禁感慨我过去的四年真是虚度啊.总结一下第一章学习到的知识吧. ①闰年判断 int is ...
- [USACO精选] 第二章 动态规划(一)
#4 公司利润 2014-01-16 这真的是动归?怎么觉得有点贪心的心态在.时间复杂度O(N),空间复杂度O(1),轻松加愉快!唯一要注意的是ANS一开始要赋负值,因为最终答案可能是负的. ; va ...
- (转)iOS Wow体验 - 第一章 - iOS人机界面设计规范纵览
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第一章译文精选,其余章节将陆续放出. 关于本套译文 ...
- 第一章 初始C语言
第一章 初始C语言 目录 第一章 初始C语言 1. C语言起源 2. 选择C语言的理由 2.1 设计特性 2.2 高效性 2.3 可移植性 2.4 强大而灵活 2.5 面向程序员 3. C语言的应用范 ...
- 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...
- MyBatis3.2从入门到精通第一章
第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...
- Nova PhoneGap框架 第一章 前言
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...
- 第一章 MYSQL的架构和历史
在读第一章的过程中,整理出来了一些重要的概念. 锁粒度 表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...
- 第一章 Java多线程技能
1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...
随机推荐
- iOS 开发之 Xcode6 创建真机调试证书
http://jingyan.baidu.com/article/ff411625b8141312e48237a7.html 1.登录苹果开发者中心 2.登录后的界面如图所示,如果没有最上面的两个选项 ...
- ios 开发之 Xcode6 No valid signing identities (i.e. certificate and private key pair) matching...
之前的项目用证书真机测试过,我想再无证书Build,出现下面的报错提示! 下面的team我无法改成None!一点击None选的还是Unhonw name(JPGE28K3W9)这个是报错的关键 最后由 ...
- Java Base64编码解码实现
我尝试过两种方式:java自带的sun.misc的工具类,还有commons-codec.jar 1.sun.misc的工具类 String encoderStr = null; BASE64Enco ...
- ubuntu sudo apt-get update 失败 解决方法
sudo apt-get update 报了一堆错误: Err http://cn.archive.ubuntu.com trusty InRelease Err http://cn.archive. ...
- 任务调度quartz
http://www.cnblogs.com/cnjava/archive/2013/02/28/2937291.html
- mysql+tomcat+spring 配置心得(从0开始搭环境)
前几天公司竞一个标要做个POC,前端AugularJs做mobile界面,后端Spring MVC做Restful API供前端调用. 时间紧急,大家都忙,so我这个不写代码的闲人花一上午配了一套Sp ...
- 使用TCP/IP的套接字(Socket)进行通信
http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socket的引入 ...
- NOIP 2014 普及组 T3 螺旋矩阵
[题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...
- MySQL 函数积累
IFNULL(expr1,expr2) // 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值 IF(expr1,expr2,e ...
- 增强Web可用性,你需要避免的七大设计错误
Web设计给了你展示自我创新才能的平台,同时也要求你特别关注其中的诸多琐碎细节.优秀的Web设计师需要从设计前辈那里获得设计灵感,寻求他们给的建议,并反复推敲,以及付出诸多努力.职业博客作者Rajni ...