【快速幂+高精度】SSL 2314 穿越丛林

编程入门 行业动态 更新时间:2024-10-11 21:30:11

【快速幂+高精度】SSL 2314 穿越<a href=https://www.elefans.com/category/jswz/34/1737417.html style=丛林"/>

【快速幂+高精度】SSL 2314 穿越丛林

大意

给定若干个数字,求出 28的个数 2 8 的 个 数


思路

由于数据 50000 50000 。。。
于是,暴模炸掉,高精炸掉,压位高精 TLE T L E

所以,选择了快速幂+压位高精200 ms m s


代码

#include<cstdio>
#include<vector>
#define ymw 1000000000//压位高精度
using namespace std;int n,k=0;
vector<long long>ans,x;
char c;
inline int read()
{int f=0;while(c=getchar(),c<48||c>57);f=(f<<3)+(f<<1)+c-48;while(c=getchar(),c>47&&c<58) f=(f<<3)+(f<<1)+c-48;return f;
}
inline void write(long long x){if(x>9)write(x/10);putchar(x%10+48);return;}
inline void mulx()//ans*x
{vector<long long>c;for(register int i=0;i<ans.size();i++)for(register int j=0;j<x.size();j++){if(c.size()==i+j) c.push_back(ans[i]*x[j]);else c[i+j]+=ans[i]*x[j];if(c.size()==i+j+1) c.push_back(c[i+j]/ymw);else c[i+j+1]+=c[i+j]/ymw;c[i+j]%=ymw;}ans=c;while(!ans.back()) ans.pop_back();return;
}
inline void self()//x*x
{vector<long long>c;for(register int i=0;i<x.size();i++)for(register int j=0;j<x.size();j++){if(c.size()==i+j) c.push_back(x[i]*x[j]);else c[i+j]+=x[i]*x[j];if(c.size()==i+j+1) c.push_back(c[i+j]/ymw);else c[i+j+1]+=c[i+j]/ymw;c[i+j]%=ymw;}x=c;while(!x.back()) x.pop_back();return;
}
inline void ksm(register int y)//快速幂
{while(y){if(y&1) mulx();self();y>>=1;}return;
}
signed main()
{n=read();for(register int i=0;i<n;i++) if(read()==8) k++;ans.push_back(1);x.push_back(2);ksm(k);for(register int i=ans.size()-1;i>=0;i--)//输出{long long k=ymw/10;if(i<ans.size()-1)while(k>ans[i]&&k>1) putchar(48),k/=10;write(ans[i]);}
}

更多推荐

【快速幂+高精度】SSL 2314 穿越丛林

本文发布于:2024-03-14 21:51:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1737416.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:丛林   快速   SSL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!