HDU ACM 1402 A * B Problem Plus
来源:互联网 发布:淘宝店铺推广策划 编辑:程序博客网 时间:2024/05/16 09:51
分析:使用64位来保存整数,一个64位保存9位,最后920ms飘过,如果使用ASCII码模拟绝对TLE。貌似这题可以使用FFT(快速傅立叶变换)解决,但是这种方法比较复杂,还没有理解。
#include<iostream>using namespace std;__int64 a[10001],b[10001]; //整数a,b,每个存储9位__int64 ans[40001]; //结果char sa[50001],sb[50001]; //字符串a,bint la,lb,l; //整数a,b及结果的长度#define MOD 1000000000void s2int(char* ss,__int64* t,int& k) //字符串转换为64位整形{int len,j;__int64 tp=0,p=1,d=1;len=strlen(ss);k=0;for(j=len-1;j>=0;j--){tp+=(__int64)(ss[j]-'0')*d;if(p>=9){t[k++]=tp;tp=0;p=d=1;}else{p++;d*=10;}}t[k++]=tp;}void show(){int i;printf("%I64d",ans[l-1]);for(i=l-2;i>=0;i--)printf("%09I64d",ans[i]);printf("\n");}void solve(){int i,j;__int64 jf;memset(a,0,sizeof(sa));memset(b,0,sizeof(sb));s2int(sa,a,la); //转换为整形s2int(sb,b,lb);memset(ans,0,(la+lb+2)*sizeof(__int64));for(i=0;i<la;i++){jf=0;l=i;for(j=0;j<lb;j++){jf+=a[i]*b[j]+ans[l];ans[l++]=jf%MOD;jf/=MOD;}while(jf){jf+=ans[l];ans[l++]=jf%MOD;jf/=MOD;}}show();}int main() {while(scanf("%s%s",sa,sb)==2){solve();} return 0; }
0 0
- HDU ACM 1402 A * B Problem Plus
- acm hdu p1402 A * B Problem Plus 水题
- hdu 1402 A * B Problem Plus
- hdu 1402 A * B Problem Plus FFT
- HDU 1402 A * B Problem Plus FFT
- HDU 1402 A * B Problem Plus
- hdu 1402 A * B Problem Plus
- [HDU 1402]A * B Problem Plus(FFT)
- HDU 1402 A * B Problem Plus FFT
- 【HDU】1402 A * B Problem Plus 【FFT】
- 【HDU】1402 A * B Problem Plus 【FFT】
- HDU 1402 A * B Problem Plus
- HDU 1402 A * B Problem Plus
- HDU 1402 A * B Problem Plus
- HDU 1402:A * B Problem Plus
- HDU 1402 A * B Problem Plus FFT
- hdu 1402 A * B Problem Plus[【FFT】
- HDU 1402 A * B Problem Plus
- ASP.NET网站开发——类库和数据库连接
- RHadoop实践系列之一:Hadoop环境搭建
- codeforces/#305 Div1/547/B Mike and Feet
- winform开发第一天
- Android漂亮的对话框项目sweet-alert-dialog
- HDU ACM 1402 A * B Problem Plus
- java中this的基本的用法
- 让你更好的使用jQuery插件
- adobe acrobat设置黑白打印
- 使用erwin
- java.io.Serializable浅析
- Linux 搭建 GIT 仓库 Gitblit
- IOS判断当前日期在两个日期之间。
- leetcode刷题 ,总结,记录,备忘。144