USACO fact4, spin
1、fact4
这个问题在《编程之美》上有过一个类似的问题,大概是求阶乘 n! 后面有多少个0,最后可以转换为求[1,N]之间因子5有多少次。这个问题和fact4有点渊源,对于 n! 的尾数,看看规律就知道了:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5,040
8! = 40,320
9! = 362,880
10! = 3,628,800
11! = 39,916,800
12! = 479,001,600
13! = 6,227,020,800
14! = 87,178,291,200
15! = 1,307,674,368,000
16! = 20,922,789,888,000
其实都是有 (n-1)! 的非0尾数与 n 乘积的尾数,唯一的麻烦是遇到了5,就会使得尾数变0,这时候要往进位去找新产生的尾数。好了,所有的 Trick 都在这了。我们看到题目指出 n 不大于4220 < 5^6,所以,代码如下,注意那个pow:
- #include <fstream>
- using namespace std ;
- ifstream fin ( "fact4.in" ) ;
- ofstream fout ( "fact4.out" ) ;
- int N ;
- int main ( )
- {
- fin >> N ;
- int multiplier = 1, pow = 100000, factor ;
- for ( int i = 1 ; i <= N ; ++i )
- {
- factor = i % pow ;
- multiplier = multiplier * factor ;
- while (multiplier % 10 == 0 )
- multiplier / = 10 ;
- while (multiplier / pow > 0 )
- multiplier % = pow ;
- }
- fout << multiplier % 10 << endl ;
- return 0 ;
- }
2、spin
单纯朴素模拟,借助STL的bitset来存储轮子们的位置信息,因为数据量实在是小,所以没必要用线段树来做时空优化了,要是用线段树,肯定要快N倍吧。然后其实你不用bitset,直接开一个bool数组也是OK的。
- #include <fstream>
- #include <bitset>
- using namespace std ;
- ifstream fin ( "spin.in" ) ;
- ofstream fout ( "spin.out" ) ;
- #define PI 360
- int speed [ 6 ] ;
- bitset <PI > curr [ 6 ], next [ 6 ] ;
- int main ( )
- {
- int num, start, end ;
- for ( int i = 1 ; i <= 5 ; i ++ )
- {
- fin >> speed [i ] >> num ;
- for ( int j = 1 ; j <= num ; j ++ )
- {
- fin >> start >> end ;
- end + = start ;
- for ( int k = start ; k <= end ; k ++ )
- curr [i ]. set (k %PI ) ;
- }
- }
- int angle = 0 ;
- bool flag ;
- while (angle < PI )
- {
- for ( int i = 0 ; i < PI ; ++i )
- {
- flag = false ;
- for ( int j = 1 ; j <= 5 ; j ++ )
- {
- if ( !curr [j ]. test (i ) )
- {
- flag = true ;
- break ;
- }
- }
- if ( !flag )
- {
- fout << angle << endl ;
- return 0 ;
- }
- }
- for ( int i = 1 ; i <= 5 ; i ++ )
- {
- for ( int j = 0 ; j < PI ; j ++ )
- next [i ] [j ] = curr [i ] [ (j +PI -speed [i ] ) %PI ] ;
- curr [i ] =next [i ] ;
- }
- ++angle ;
- }
- fout << "none" << endl ;
- return 0 ;
- }
USACO fact4, spin相关推荐
- 嵌入式 C/C++语言精华文章集锦
C/C+语言 struct 深层探索 ............................................................................2 C++ ...
- USACO 3.2.3 Spin
最近总是刷水题啊...还是相当谁的题啊...而且水题也好久才A掉啊...郁闷... 好不容易想起来刷个USACO,又碰个水题...最近堕落了啊... 链接就不给了... 题也自便吧. 模拟秒之.判断每 ...
- USACO / Factorials (简单模拟)
USACO/Factorials Factorials阶乘 N的阶乘写作N!,表示小于等于N的所有正整数的乘积. 阶乘会变大得很快,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了. ...
- USACO 3.2 Factorials 我居然一下过了(USACO最水题)
题目大意是求n!的从右边数第一个非零数字 做法是,对于每次乘的结果把结尾的零都去掉(利用不断除10),然后取最低的几位(利用%100000),最后输出结果的个位. 这怕是USACO上代码最短的一道题了 ...
- usaco Shaping Regions
这就是usaco 前面的windows area的变形. /* ID:jinbo wu TASK:rect1 LANG:C++ */ #include<iostream> #include ...
- usaco Postal Vans(dp)
是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...
- usaco Beef McNuggets
这两天贼烦,ccf炸了,还有一个烦心事.哎我都不知道自己能不能坚持下去了.马上期末考了.这段时间还是抓紧时间复习吧同时刷usaco的节奏要跟以前一样了,毕竟课少了. 题解: 只要你知道以下的数论结论, ...
- usaco Factorials
想到除2除5,没想到除后怎么办 /* ID:jinbo wu TASK: fact4 LANG: C++ */ #include<bits/stdc++.h> using namespac ...
- usaco前两章小结
usaco 暑假老师有推荐做但是那个题目太长了,而且·大部分都是废话做起来特别慢,而且当时自己基本上什么都不懂,太难了所以看了题解做了两题就放弃了. 转眼就上学了,因为想学习acm所以就胡乱找题做但是 ...
最新文章
- oracle mysql事物隔离级别_Oracle数据库事物隔离级别
- 全球IP地址数周内用完,或现无法上网情况
- 年轻人的第一只机器狗,只要1.6万
- dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?
- 聊聊《战魂铭人》的游戏设计
- C++学习笔记之对文件的操作2
- 和华为杯_2019全国大学生物联网设计竞赛(华为杯)拉开序幕
- C++ I/O流 格式控制(下)
- 【深入浅出etcd系列】4. 客户端
- python变量的作用域及生命周期_Python——变量的作用域
- 数组保存为灰度图_「PS抠图系列9」通道
- VPC2007与VServer2005R2比较
- Mysql数据库InnoDB存储引擎的隔离级别
- 在线html游戏翻译,怎么把整个英文网页游戏翻译成中文
- win10只有c盘怎么分区_win10系统硬盘怎么分区
- 跨境人才经验分享:跨境电商职位面试经验技巧
- 养兔子c语言sdut,SDUT 养兔子
- YEDROUDJ-NET: AN EFFICIENT CNN FOR SPATIAL STEGANALYSIS【Yedroudj-Net:一个高效的空间隐写分析CNN】
- C语言只能在开头定义变量?
- selenium被检测