好不容易坑来了传说中的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精选] 第一章 数值计算的更多相关文章

  1. 【USACO】第一章总结

    做了大半个月,终于把第一章做完了 有的题遇到了不小的坎儿,看着网上一群高中生都做得那么好,心理还是有些小郁闷的.不禁感慨我过去的四年真是虚度啊.总结一下第一章学习到的知识吧. ①闰年判断 int is ...

  2. [USACO精选] 第二章 动态规划(一)

    #4 公司利润 2014-01-16 这真的是动归?怎么觉得有点贪心的心态在.时间复杂度O(N),空间复杂度O(1),轻松加愉快!唯一要注意的是ANS一开始要赋负值,因为最终答案可能是负的. ; va ...

  3. (转)iOS Wow体验 - 第一章 - iOS人机界面设计规范纵览

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第一章译文精选,其余章节将陆续放出. 关于本套译文 ...

  4. 第一章 初始C语言

    第一章 初始C语言 目录 第一章 初始C语言 1. C语言起源 2. 选择C语言的理由 2.1 设计特性 2.2 高效性 2.3 可移植性 2.4 强大而灵活 2.5 面向程序员 3. C语言的应用范 ...

  5. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  6. MyBatis3.2从入门到精通第一章

    第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...

  7. Nova PhoneGap框架 第一章 前言

    Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...

  8. 第一章 MYSQL的架构和历史

    在读第一章的过程中,整理出来了一些重要的概念. 锁粒度  表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...

  9. 第一章 Java多线程技能

    1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...

随机推荐

  1. POJ 3181 Dollar Dayz && Uva 147 Dollars(完全背包)

    首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_p ...

  2. OpenGL的几何变换[转]

    OpenGL的几何变换 1.实验目的: 理解掌握一个OpenGL程序平移.旋转.缩放变换的方法. 2.实验内容: (1)阅读实验原理,运行示范实验代码,掌握OpenGL程序平移.旋转.缩放变换的方法: ...

  3. js 删除多个相同name元素。

    var obj = document.getElementsByName("abc"); for(var i = 0;i<(obj.length) * 2;i++){ obj ...

  4. icp算法基本思想

    Icp基本思想参考资料:http://www.cnblogs.com/jian-li/articles/4945676.html ,包括点-点,点-面的各种icp变种 Icp算法就是两个点云X.Y之间 ...

  5. tabhost切换标签:Log中出现You must supply a layout_width attribute的解决方法

    谷歌.百度该问题,发现,除非是真的忘记添加layout_height或者layout_width属性值,对于布局文件没有语法问题但又难以发现问题所在的情况,从自己的经历和一个帖子的说明看到,该错误多半 ...

  6. PacBio & BioNano (Assembly and diploid architecture of an individual human genome via single-molecule technologies)

    Assembly and diploid architecture of an individual human genome via single-molecule technologies 文章链 ...

  7. ios开发中的toll-free bridged

    所谓的Toll-free bridging是说您可以在某个框架的方法或函数 同时使用Core Foundatio和Foundation 框架中的某些类型. 很多数据类型支持这一特性,其中包括群体和字符 ...

  8. 利用mycat实现mysql数据库读写分离

    1.这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下: 2.Demo 2.1 在mysql master上创建数据库创建db1 2.2 在数据库db1创建表student ...

  9. 解决 placeholder 垂直不居中,偏上的问题

    解决 placeholder 垂直不居中,偏上的问题 安卓浏览器显示placeholder 垂直不居中,而iphone没问题,搜了一下答案,解决方法是把input的line-height去掉就行 参考 ...

  10. python 练习 15

    #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1,10): for j in range(1,10): result = i * j ...