2019.7.10 校内测试题 勇敢的热气球驾驶者

 题目

  勇敢的热气球驾驶者(balloonist.cpp,1s,512MB)

【问题描述】:

  十名数学家正驾驶着热气球在太平洋上空飞行。当他们通过赤道上空时,他

们决定开一瓶香槟来庆祝一下。不幸的是,香槟瓶上软木塞把热气球冲出了一个
洞,氢气开始泄露、气球开始下降,不久他们将会坠入大海并被饥饿的鲨鱼吃掉。
  但是也不是一点转机都没有,只要这些热气球驾驶者有一人能够牺牲自己跳
出去,热气球将可以延长一点时间坠入大海等待救援。现在的问题是谁愿意牺牲
自己跳出去呢?为了公平地解决这个难题,数学家从 1 到 10 进行了编号,先每
人写一个整数 ai(1<=ai<=10000),然后计算出 a1*a2*…*a10 的正整数因子的个
数 N,例如 6 的正整数因子个数为 4(它们是 1,2,3,6)。,那个被扔出去的英
雄就是 N 的最后一位数字。你的任务是找到这个数字。

【输入文件】:

   输入文件包括 10 个用空格隔开的数字 ai

【输出文件】:

  只有一个单独数字(0 到 9),即 N 的最后一位

【输入输出样例】:

  balloonist.in
    1 2 6 1 3 1 1 1 1 1
  balloonist.out
    9

【数据规模】:

  30%的数据满足 1<n<=10000; 100%的数据满足 1<n<=2^31-1。

 

 

考试得分:  50

 

 

主要算法 :  质数(质因数分解),组合数学

 

 

应试策略:

  1.   看题目,第一个想到的就是直接相乘,然后一直模拟算出其因子个数,这是个大数啊!一共40位,long long 不行啊,高精度行吗?sqrt(大数)为20为超过了long long,高精除以高精,太麻烦了啊!
  2.        那么将其质因数分解化为质数的幂的乘积的形式,发现好像是个组合数学的题目,哎呀呀,好开心,考虑到一个质数选还是不选,选几个,则可以知道,将每一个数质因数分解,将所有质因数的幂加1的基础上求出其乘积,边乘边MOD
  3.        en,忘记打long long了,结果挂了

   代码

#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define LL long long
#define FORa(i,s,e) for(LL i=s;i<=e;i++)
#define FORs(i,s,e) for(LL i=s;i>=e;i--)
#define gc pa==pb&&(pb=(pa=buf)+fread(buf,1,100000,stdin),stdin)?EOF:*pa++
#define File(name) freopen(name".in","r",stdin);freopen(name".out","w",stdout);

using namespace std;
static char buf[100000],*pa=buf,*pb=buf;
inline LL read();

const LL N=10000;
LL ans=1,a[11],ct[N+1];
bool Check(LL x)
{
    FORa(i,2,sqrt(x)) while(x%i==0) ++ct[i],x/=i; 
    if(x>1) ++ct[x];
}
int main()
{
    File("balloonist");
    FORa(i,1,10) a[i]=read(),Check(a[i]);
    FORa(i,2,N) if(ct[i]) ans=(ans*(ct[i]+1))%10;
    printf("%lld",ans);
    return 0;
}
inline LL read()
{
    register LL f(1),x(0);register char c(gc);
    while(c<'0'||c>'9') f=c=='-'?-1:1,c=gc;
    while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=gc;
    return f*x;
}

 

 

 

非完美算法:  

    照搬应试策略

 

 

正解:

    打个long long解决问题

 

 

 

总结:

  1.   考虑题目的顺序,第一:看题目说明,本次考试没有,大型考试都有。第二:看题目名与空间时间限制。第三:注意审题,兄嘚,能一字一字先读一遍,在提炼题干好吗?第三:注意各个输入与输出的数据范围。第四:注意先打暴力放在那里,暴力一定要经过自己手动的特殊数据考验成功,暴力一定要对,慢慢想正解,最后对拍验证,一定要打对拍,不是部分小数据验算
  2.        正解先想一下数学好吗?

 

 

 

 

 

 

posted @ 2019-07-10 15:45  SeanOcean  阅读(324)  评论(0编辑  收藏  举报