Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
先排序,再二分,注意有长度相等的情况。什么也不多说了,贴。。。#include<stdio.h> #include<stdlib.h> int num[20001]; int n; int cmp(const void *e1,const void *e2){ return *(int *)e1-*(int *)e2; }; int bin(int data){ int mid; int l=0; int r=n-1; while(l<=r){ mid=(l+r)/2; if(num[mid]==data) return mid; else if(num[mid]>data) r=mid-1; else l=mid+1; } return l; }; int main() { int i,flag; int s,sum,k; while(scanf("%d%d",&n,&s)!=EOF){ for(i=0;i<n;i++) scanf("%d",&num[i]); qsort(num,n,sizeof(num[0]),cmp); sum=0; for(i=0;i<n;i++){ if(num[i]<s){ k=bin(s-num[i]); if(num[k]<=s-num[i]){ flag=0; while(num[k]<=s-num[i]&&k<n){ flag=1; k++; } if(flag||k==n) k--; } else { while(num[k]>s-num[i]&&k>=0) k--; } if(k>i) sum+=(k-i); } else break; } printf("%d\n",sum); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator