湘潭oj_1250 Super Fast Fourier Transform

来源:互联网 发布:java的基础知识 编辑:程序博客网 时间:2024/06/05 07:10
分析可知a,b数组都有重复的数,然后模拟运算即可。
#include<stdio.h>#include<math.h>#include<string.h>int a[1000001],b[1000001],a1[100001][2],b1[100001][2];int abs(int x) {    return (x>=0?x:-x);}int main(){ int x,n,m,i,j; while(~scanf("%d%d",&n,&m)) {     memset(a,0,sizeof(a));     memset(b,0,sizeof(b));     for(i=1;i<=n;i++) {scanf("%d",&x);a[x]++;}    //以下标标记法的方式输入     for(i=1;i<=m;i++) {scanf("%d",&x);b[x]++;}   int k1=-1,k2=-1;  for(i=0;i<=1000000;i++)        //统计重复的数的值及次数  {      if(a[i]){a1[++k1][0]=i;a1[k1][1]=a[i];}      if(b[i]){b1[++k2][0]=i;b1[k2][1]=b[i];}  }  long long sum=0;   for(i=0;i<=k1;i++)    //模拟运算   {      long long s=0;     for(j=0;j<=k2;j++)     {         long long u=((int)sqrt(abs(a1[i][0]-b1[j][0])))*b1[j][1];         s+=u;     }      sum+=s*a1[i][1];   }   printf("%I64d\n",sum);//开始以%lld输出一直wrong,,, } return 0;}

 
0 0
原创粉丝点击