2013年7月3日 星期三

2013/7/3 HSNU OJ Problem : 184 - 血拼

#include<iostream>
#include<cstdio>
#include<algorithm>
typedef long long int smart ;
using namespace std;
int S[100000], J[100000];
int main()
{
    int n, m, s; scanf("%d %d %d", &n, &m, &s);
    for(int i = 0; i < n; i++) scanf("%d", &S[i]);
    for(int i = 0; i < m; i++) scanf("%d", &J[i]);
    smart SJ = 0;
    sort(J,J+m);
    for(int i = 0; i < n; i++)
    {
        if( S[i] > s ){ continue; }
        int op = s - S[i];
        int l = 0, r = m-1;
        if( op < J[l] ){ continue; }
        else if( op >= J[r] ){ SJ += m; }
        else
        {
            int mid = (l+r)/2;
            while( l != r-1 )
            {
                if( op >= J[mid] ){ l = mid; }
                else{ r = mid; }
                mid = (l+r)/2;
            }
            SJ += r;
        }
    }
    printf("%I64d\n", SJ);
}

沒有留言:

張貼留言