[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.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...
随机推荐
- Maven项目的发布,发布到Nexus
原文:http://blog.csdn.net/mexican_jacky/article/details/50277505 第一步: 配置信息如下: <!-- 发布项目的配置 --> ...
- Mybatis 级联查询 (一对多 )
后台系统中 涉及到添加试卷 问题 答案的一个模块的.我需要通过试卷 查询出所有的试题,以及试题的答案.这个主要要使用到Mybatis的级联查询. 通过试卷 查询出与该试卷相关的试题(一对多),查询出试 ...
- 能在CAD2004以下版本里面打开2007以上版本文件的外挂
下载地址:http://yunpan.cn/cjrxMKNubXQ5E 访问密码 1974 老何CAD工具安装办法:[推荐]先安装老何工具箱,然后用[扩展添加老何cad下拉菜单.bat]就完成老何下 ...
- VB6 GDI+ 入门教程[7] Graphics 其他内容
http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[7] Graphics 其他内容 2009 年 9 月 ...
- javaweb2 URL(查找的过程)
URL: 全名叫统一资源定位符,用于定位互联网的资源. 问题:接上(javaweb1 tomcat)http://localhost:8080/myweb/test.html 分析:http://-- ...
- linux笔记:用户管理命令和用户组管理命令
用户管理命令 命令名称:useradd功能:添加用户(添加完后不能立即使用,必须用passwd修改用户密码后才能使用)用法:useradd [选项] 用户名选项参数:-u 手工指定用户的UID-d 手 ...
- Python--关于dict
慕课网<Python 入门>学习笔记 1.dict 特性 dict用花括号{}表示,然后按照 key: value, 写出来即可.最后一个 key: value 的逗号可以省略. ①.di ...
- 面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?【转自知乎】
这几年面过的各种Android开发也有三位数了,failed的不敢说,pass的基本都没有看走眼,来得晚了也想说说我的体会. 一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大 ...
- C#抓包
抓包過程中發現頁面<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" v ...
- IOS开发设计思路
我在做 iOS 开发的时候,发现自己在写程序的时候,常常处于两种状态的切换,我把这两种状态称为软件开发的上帝模式与农民模式.我先给大家介绍一下这两种模式的特点. 上帝模式 处于上帝模式时,我需要构思整 ...