[usaco3.2.1]fact4

  这题一开始我想了又想,谁知道最后竟然一个暴力的高精度过了,官方的题解好像是用了一些数学的方法。

/*
ID:abc31261
LANG:C++
TASK:fact4
*/
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=5000;
int num[maxn],len;

void cheng(int numa)
{
     int i,x=0;
     for (i=1;i<=len;i++)
     {
         num[i]=num[i]*numa+x;
         x=num[i]/10;
         num[i]=num[i]%10;
     }
     while (x!=0)
     {
           num[++len]=x%10;
           x=x/10;
     }
}
int main()
{
    long long i,n;
    freopen("fact4.in","r",stdin);
    freopen("fact4.out","w",stdout);
    cin>>n;
    len=num[1]=1;
    for (i=2;i<=n;i++)cheng(i);
    for (i=1;num[i]==0 && i<=len;i++){}
    cout<<num[i]<<endl;
    return 0;
}
时间: 2025-01-03 21:25:03

[usaco3.2.1]fact4的相关文章

usaco-3.1-PROB Shaping Regions-漂浮法

漂浮法,顾名思义,就是一块块的往上飘. 以逆序来进行放置,即n to 1.逆序的好处在于放置一个矩形后,俯视看到的就是最终俯视该矩形应该看到的.因为挡着它的矩形在之前已经放置好了,所以可直接统计,为递归创造了条件.每放一个矩形,可以想象成将其扔入一密度很大的海水底部,海分成了n层,然后矩形开始向上浮.在上浮过程中若碰撞到其他的矩形则断裂成几个小矩形,继续上浮,直到浮出水面.于是想到用个递归来模拟上浮过程. /* ID: rowanha3 LANG: C++ TASK: rect1 */ #inc

usaco-3.2-fact4-pass

这个是数论知识,列举一下前面十几个就可以看出规律: /* ID: qq104801 LANG: C++ TASK: fact4 */ #include <iostream> #include <fstream> #include <cstring> #include <vector> #include <map> #include <list> #include <set> #include <queue> #

[usaco3.2.3]spin

这道题直接枚举就好了,但我当时竟然没想到,我真是太失败了.....Q_Q /* ID:abc31261 LANG:C++ TASK:spin */ #include<cstdio> #include<cstring> #include<iostream> using namespace std; const int n=5,maxn=360; int s[10],first[10][10],end[10][10],num[10],f[maxn*2]; bool flag

[usaco3.2.5]msquare

题目传送门:http://www.nocow.cn/index.php/Translate:USACO/msquare 这道题bfs+hash,但想到要判重的数字不多,就直接用了map,数组传递有些麻烦,所以直接写在了一起,会有点乱 /* ID:abc31261 LANG:C++ TASK:msquare */ #include<cstdio> #include<cstring> #include<queue> #include<map> #include&

USACO--3.2Sweet Butter+推优化的Dijkstral算法

这个题目思路是很简单的,我们只需要枚举每个顶点作为目的地,然后再取其中距离总和最小的作为答案.开始的时候我用的是floyd一次就将所有点之间的最小距离求出来,但是超时了. 后面每次枚举一个点就用堆优化的dijkstral求一次这个点到其余点的最短路,这样就可以过了.算法中还用数组模拟了图的邻接矩阵. 代码如下: /* ID: 15674811 LANG: C++ TASK: butter */ #include<iostream> #include<cstdio> #include

usaco-3.4-rockers-passed

又是一个背包问题,动态规划求解: /* ID: qq104801 LANG: C++ TASK: rockers */ #include <iostream> #include <fstream> #include <cstring> #include <vector> #include <queue> #include <stack> #include <algorithm> using namespace std; #

[USACO3.3.3]camelot

题目传送门:http://www.nocow.cn/index.php/Translate:USACO/camelot 这道题让我心痛,一开始写写不出,后来拖了很久,决定去看题解,没想到又看不懂官方题解,唉!后来看了下面的题解做了出来.题解的话,大概就是先预处理每个格子到另外格子的位置,再枚举在王的坐标+-2位置接王,枚举所有棋子的集中点加起来计算就好了.我的代码为了方便略粗鲁. 题解传送门:http://www.nocow.cn/index.php/USACO/camelot /* ID:ab

[usaco3.2.4]ratios

题目传送门:http://www.nocow.cn/index.php/Translate:USACO/ratios 这道题也是直接枚举... /* ID:abc31261 LANG:C++ TASK:ratios */ #include<cstdio> #include<cstring> #include<iostream> using namespace std; int a[5][5]; int main() { int i,j,l,k,p,ansmin=0x7f

[usaco3.2.2]kimbits

这道题又是看了题解. 思想大概是:我们枚举到i位数有j个1,用杨辉三角形求组合数,第i行第j列就是C(i-1,j-1),用sum[i][j]表示i位数0..j个1的所有的数的个数,那么sum[i][j]=C(i,0)+C(i,1)+......+C(i,j),那么当我们求第k个数时,当sum[i-1][j](i-1位数,0...j个1的方案数)<k时,意味着第i位是1,否则是0,以此类推. /* ID:abc31261 LANG:C++ TASK:kimbits */ #include<cst