2016长城信息杯中国大学生程序设计竞赛中南邀请赛 xtu 1250 Super Fast Fourier Transform

http://www.dengwenhuo.cn/?id=196

Bobo has two sequences of integers{a1,a2,,an}and{b1,b2,,bm}. He would like to find

i=1nj=1m|aibj|.

Note thatxdenotes the maximum integer does not exceedx, and|x|denotes the absolute value ofx.

Input

The input contains at most30sets. For each set:

The first line contains2integersn,m(1n,m105).

The second line containsnintegersa1,a2,,an.

The thrid line containsmintegersb1,b2,,bm.

(ai,bi0,a1+a2++an,b1+b2+,bm106)

Output

For each set, an integer denotes the sum.

Sample Input

1 2
1
2 3
2 3
1 2
3 4 5

Sample Output

2

贡献了十几波wa。。。。g++和g++11 编译器的问题?g++交了十几次 换个g++11就过了 omg

有10^5个数 然后所有数的和小于10^6次方 一眼感觉下去会有很多重复的数 去一下重就好了。。

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string.h>
using namespace std;
int a[100005],b[100005],suma[1000005],sumb[1000005];
int main()
{
    int la,lb,t,n,m;
    long long ans;
    while(~scanf("%d %d",&n,&m))
    {
        memset(suma,0,sizeof suma);
        memset(sumb,0,sizeof sumb);
        la=lb=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&t);
            if(suma[t]==0)
                a[la++]=t;
            suma[t]++;
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d",&t);
            if(sumb[t]==0)
                b[lb++]=t;
            sumb[t]++;
        }
        ans=0;
        for(int i=0;i<la;i++)
            for(int j=0;j<lb;j++)
            {
                ans+=(long long)suma[a[i]]*sumb[b[j]]*(long long)(sqrt(abs(a[i]-b[j])));
            }
        printf("%lld\n",ans);
    }
    return 0;
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/A852852852852/article/details/51720147
个人分类: c/c++ 最爱水题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭