Example #1
0
/*
 * fonction pour trouver le minimum et le maximum du tableau et appeler le tri pigeonnier
 */
void
pigeonnier(ordre T1[], long taille_tableau, long rang) {
  long i;
  ordre min, max;

  memoire[4] += 3;

  min = T1[0];
  max = T1[0];
  barometre[4]++;
  //passe au travers des éléments du tableau
  for (i = 1; i < taille_tableau; i++, barometre[4]++) {
    tp++;
    barometre[4]++;
    if (T1[i].valeure < min.valeure) {
      tp++;
      barometre[4]++;
      min = T1[i];
    }
    barometre[4]++;
    if (T1[i].valeure > max.valeure) {
      tp++;
      barometre[4]++;
      max = T1[i];
    }
  }
  counting_sort_mm(T1, taille_tableau, min, max);
}
int main()
{
	int cases;
	scanf("%d",&cases);
	while(cases--)
	{
		int frnds,pzc;
		scanf("%d %d",&frnds,&pzc);
		long x;
		long counter=0;
		if(frnds==1)
		{
			scanf("%ld",&x);
			if(x==pzc)
				counter++;
			goto ab;
		}
		long money[200000];
		long i=0;
		for(i=0;i<frnds;i++)
			scanf("%ld",&money[i]);
		counting_sort_mm(money,frnds,-200000,200000);
		long left=0;
		long right=frnds-1;
		while(left<right)
		{
			if((money[left]+money[right])==pzc)
			{
				left++;
				right--;
				counter++;
			}
			else if((money[left]+money[right])<pzc)
				left++;
			else
				right--;
		}
ab:		printf("%ld\n",counter);
	}
	return 0;
}