fork(1) download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. int D,N;
  7. int pktx[45000] , pkty[45000];
  8.  
  9. int main()
  10. {
  11. ios::sync_with_stdio(0);
  12. cin >> D;
  13. //D=1;
  14. while (D--)
  15. {
  16. cin >> N;
  17. int wart[N+1];
  18. for (int i=1 ; i<=N ; i++)
  19. {
  20. cin >> pktx[i] >> pkty[i];
  21. wart[i]=1;
  22. }
  23. if (N==3) cout << "1 2 3" << endl;
  24. else
  25. {
  26. int odp[3], a=N/3, mwxp = -1000000000 , mwxm = 1000000000, mwyp = -1000000000, mwym = 1000000000, lp[4];;
  27. while (a--)
  28. {
  29.  
  30. for (int i=1 ; i<=N ; i++) //szukanie limitow w trojkacie
  31. {
  32. if (wart[i]==1)
  33. {
  34. if (pktx[i]>=mwxp) mwxp=pktx[i], lp[0]=i;
  35. if (pktx[i]<=mwxm) mwxm=pktx[i], lp[1]=i;
  36. if (pkty[i]>=mwyp) mwyp=pkty[i], lp[2]=i;
  37. if (pkty[i]<=mwym) mwym=pkty[i], lp[3]=i;
  38. }
  39. }
  40. mwxp = -1000000000 , mwxm = 1000000000, mwyp = -1000000000, mwym = 1000000000;
  41. wart[lp[0]]=0;
  42. wart[lp[1]]=0;
  43. wart[lp[2]]=0;
  44. wart[lp[3]]=0;
  45. //sortowanie odpowiedzi:
  46. sort(lp, lp+4);
  47. int m=0;
  48. for (int l=0 ; l<4 ; l++)
  49. {
  50. if (lp[l] != lp[l-1]) odp[m]=lp[l], m++;
  51. }
  52. cout << odp[0] << " " << odp[1] << " " << odp[2] << endl;
  53. }
  54. }
  55. cout << endl;
  56. }
  57. return 0;
  58. }
  59.  
Success #stdin #stdout 0s 4368KB
stdin
2
3
0 0
1 2
2 1
6
-2 0
2 0
1 1
-1 1
0 3
0 4
stdout
1 2 3

1 2 6
3 4 5