好不容易坑来了传说中的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. 【摘抄】meta系列用法总结【持续更新中】

    meta标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME). ★页面描述信息NAME变量  name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人 ...

  2. 转!!java线程状态

    一. 线程状态类型1. 新建状态(New):新创建了一个线程对象.2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运 ...

  3. hiho_1069_最近公共祖先3

    题目 给出一棵家族树,树上的节点可以由名字唯一标识.给出若干个查询,查询的内容为两个名字,结果为两个名字的最近公共祖先. 题目链接: 最近公共祖先 分析 在线的RMQ + LCA 算法,先用dfs将树 ...

  4. 【转载】PHP运行模式的深入理解

    PHP运行模式的深入理解 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-03我要评论 本篇文章是对PHP运行模式进行了详细的分析介绍,需要的朋友参考下   PHP运行模式有4钟:1) ...

  5. php中高级基础知识点

    1. 基本知识点 HTTP协议中几个状态码的含义:1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码   说明 100   (继续) 请求者应当继续提出请求. 服务器返回此代码 ...

  6. 【论文阅读记录】Real-Time Correlative Scan Matching

    这篇文章是谷歌的Cartograph中实现real_time_correlative_scan_matcher的论文 Real-Time Correlative Scan MatchingEdwin ...

  7. 深入理解JVM虚拟机-2垃圾收集器

    这里讨论的收集器基于JDK 1.7 Update 14之后的HotSpot虚拟机. 如果两个收集器之间存在连线,说明可以搭配使用.虚拟机所处的区域,则表示它是属于新生代收集器还是年老代收集器.在这里我 ...

  8. phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序

    phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序 用命名空间区分不同的数据库实例,对应代码结构上是不同的目录区分,在同一目录下基类负责初始化连接.连接来自初始化时注入的多个db服务 隐 ...

  9. java 连接msql数据库

    1.首先下载mysql的的java驱动,下载完成后把解压的mysql-connector-java-3.1.14-bin-g.jar文件放到eclipse的java项目下,然后构建路径. 2.java ...

  10. xml中的xmlns,xmlns:xsi,xsi:schemaLocation有什么作用,如果没有会怎么样呢

    如 maven 的 pom.xml 开头是下面这样的谁能解释下,这东西有社么用,不写这东西又会怎么样的,官方拷贝来的说明文档就算了,我想要简明扼要的说明.不胜感激---------<projec ...