a+b

来源:互联网 发布:指静脉识别算法源代码 编辑:程序博客网 时间:2024/05/01 22:53

题目描述

给定一个单调不减的数列p和一个整数m,求有多少组a,b,满足pa+pb=m 

输入

第一行一个整数T,表示有T组测试数据。

每组数据第一行是1个整数m

第二行是整数n,表示p中有n个数字。

第三行是n个数字,表示p的所有元素。


T3,1n,m3106,0pi3106

输出

每组数据输出一个数x,表示满足条件的组数。

样例输入

2741 2 3 4651 2 3 4 5

样例输出

25



注意下标: 
#include <iostream>#include <stdio.h> using namespace std; #define MAX 3000005 int a[MAX]; int main(){int t,n,m; scanf("%d",&t); while (t--){ scanf("%d%d",&m,&n); for (int i=0;i<n;i++)scanf("%d",&a[i]);  int l=0,r=n-1; long long sum=0; while (l<r) {       while(l<r&&a[l]+a[r]<m) l++; while(l<r&&a[l]+a[r]>m) r--; if (l<r&&a[l]+a[r]==m){       if (a[l]==a[r]) break;     int ml=a[l],mr=a[r];   int nl=0,nr=0; while(l<r&&a[l]==ml){ l++; nl++;}while(l<=r&&a[r]==mr) { r--;  nr++;}             sum+=nl*nr; }}        sum<<=1; if (l==r&&a[l]+a[r]==m)     sum++;    else if (l<r&&a[l]==a[r]&&a[l]+a[r]==m) { long long len=r-l+1; sum+=len*len; }cout<<sum<<endl; } return 0; }                                                                 


0 0