[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 installation failed invalid argument!
1.运行模拟器的时候 报出: installation failed invalid argument! 原因分析: 我把Bundle indentifier 置为空了! http://stackov ...
- Mysql的一些小知识点
MySQL简介:是由瑞典的MySQL AB公司开发的,目前是Oracle(甲骨文)公司扥一个关系型数据库产品(2008年MySQL AB公司被Sun公司收购,2009年Sun公司又被 Oracle公司 ...
- jq实现 禁止对密码框中的内容进行复制、剪切和粘贴操作
$(function () { $("input:password").on("copy cut paste", function (e) { return f ...
- 30 个有用的 HTML5 和 CSS3 表单设计
基本上表单是任何一个网站都必须要用到的元素,本文介绍的这 30 个设计方案供你参考,这些方案如果要单独下载完整可运行的文件则需要支付2-5美元的费用. 1. Fresh Forms 2. Pretty ...
- 《javascript高级程序设计》第四章 Variables,scope,and memory
4.1 基本类型和引用类型的值 primitive and reference values 4.1.1 动态的属性 dynamic properties 4.1.2 复制变量值 copying va ...
- java的HashMap与ConcurrentHashMap
好像今天没有什么源码读,那么就来看看java的这两种HashMap有啥不一样的地方吧,在这之前先普及一下HashMap的一些基本知识: (1)放入HashMap的元素是key-value对. (2)底 ...
- 为大家分享一个 Ajax Loading —— spin.js(转)
原文地址:http://www.cnblogs.com/lxblog/p/3425599.html 我们在做Ajax 异步请求的时候,一般都会利用一个动态的 Gif 小图片来制作一个Ajax Load ...
- SAP销售订单状态修改(审核) 计划行自动产生需求,产生MD04需求
不知道业务怎么配置的,创建销售单时,一堆计划行类别,什么CN,DN...都有,但是审核后需要计划行变更为CP,这样在MD04才能看到需求. 原有逻辑是弄个后台程序,审核后调一下,更新一下计划行,这样是 ...
- 5 echo展开
一.(字符)展开 1.echo在标准输出中打印出他的文本 echo this is a test 输出 this is a test 2.输出通配符时,比如*代表匹配文件名的任何字符 echo * 输 ...
- (转)mysql的增删改查
MySQL数据库的增删改查. 1,首先启动mysql数据库的服务,在运行的窗口中输入:net start mysql,这样,就可 以启动mysql数据库的服务,同理,输入net stop mysql, ...