Advertisement
Guest User

Sumful Triplets

a guest
Oct 4th, 2022
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.11 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3. class Main
  4. {
  5.     public static void main(String args[])throws Exception
  6.     {
  7.         BufferedReader bu=new BufferedReader(new InputStreamReader(System.in));
  8.         PrintWriter sb=new PrintWriter(System.out);
  9.         int t=Integer.parseInt(bu.readLine());
  10.         while(t-->0)
  11.         {
  12.             int n=Integer.parseInt(bu.readLine());
  13.             ArrayList<Integer> al=new ArrayList<>();
  14.             for(int i=1;i<=n;i++) al.add(i);
  15.            
  16.             boolean v[]=new boolean[n+1];
  17.             Set<Integer> set=new HashSet<>();
  18.             ArrayList<int[]> ans=new ArrayList<>();
  19.             while(al.size()>5)
  20.             {
  21.                 int i,sz=al.size(),dif=al.get(1)-al.get(0);
  22.                 for(i=1;i<sz;i++)
  23.                 if(dif!=al.get(i)-al.get(i-1)) break;
  24.                 for(;i<sz;i++) v[al.get(i)]=true;
  25.                
  26.                 sz=0;
  27.                 for(int x:al)
  28.                 if(!v[x]) sz++;
  29.                 int l=sz/2,r=l+1;
  30.                 if(sz%2==0) l--;
  31.                 if(l%2==0) l--;
  32.                 l--; r--;
  33.                
  34.                 //System.out.println(l+" "+r);
  35.                 ArrayList<Integer> na=new ArrayList<>();
  36.                 while(l>=0 && r<sz)
  37.                 {
  38.                     int a=al.get(l),b=al.get(r);
  39.                     set.clear(); set.add(a); set.add(b); set.add(a+b);
  40.                     if(v[a] || v[b] || a+b>n || v[a+b] || set.size()!=3) break;
  41.                    
  42.                     //System.out.println(a+" "+b+" "+(a+b));
  43.                     v[a]=v[b]=v[a+b]=true;
  44.                     ans.add(new int[]{a,b,a+b});
  45.                     l-=2; r++;
  46.                 }
  47.                
  48.                 boolean change=false;
  49.                 for(int x:al)
  50.                 if(v[x]) change=true;
  51.                 else na.add(x);
  52.                
  53.                 if(!change) break;
  54.                 al=na;
  55.             }
  56.            
  57.             sb.append(ans.size()+"\n");
  58.             for(int x[]:ans) sb.append(x[0]+" "+x[1]+" "+x[2]+"\n");
  59.         }
  60.         sb.close();
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement