Advertisement
mhdew

Template

Sep 30th, 2019
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.18 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ///Template
  6. #define in1()    freopen("C:\\Users\\SHESHER\\Rest\\Desktop\\MY COMPUTER\\Code\\Template\\New\\input.txt", "r", stdin);
  7. #define out1()   freopen("C:\\Users\\SHESHER\\Rest\\Desktop\\MY COMPUTER\\Code\\Template\\New\\output.txt", "w", stdout);
  8.  
  9.  
  10. //Data types
  11. #define lo      long
  12. #define ll      long long
  13. #define llu     unsigned long long
  14.  
  15. //loop
  16. #define f1(i,x,y)   for(int i=x;i<=y;i++)
  17.  
  18. //Constants
  19. #define MAX     100007
  20. #define MOD     1000000007
  21. #define PI      acos(-1.0)
  22.  
  23. //STL
  24. #define vout(v)    for(int i=0;i<v.size();i++){cout<<v[i]; if(i==v.size()-1) cout<<endl; else cout<<" ";}
  25.  
  26. //Scan
  27. #define sc(x)    scanf("%d", &x)
  28. #define scl(x)   scanf("%lld", &x)
  29.  
  30. //Print
  31. #define pa(a,i,n)  for(int i=0;i<n;i++){ cout<<a[i]; if(i==n-1) cout<<endl; else cout<<" ";}
  32.  
  33.  
  34. //Runtime
  35. // clock_t tStart = clock();
  36. // printf("\n>>Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
  37.  
  38.  
  39. ///Prime Check
  40. bool primeChk(int n)
  41. {
  42.     if(n==0 || n==1) return 0;
  43.     else if(n==2) return 1;
  44.     else if(n%2==0) return 0;
  45.  
  46.     for(int i=3;i*i<=n;i+=2){
  47.         if(n%i==0) return 0;
  48.     }
  49.     return 1;
  50. }
  51.  
  52.  
  53. ///Sieve
  54. bool primeFlag[MAX];
  55. int seve[MAX+2];
  56. int sidx=0;
  57. void sieve(int n)
  58. {
  59.     primeFlag[0]=1;
  60.     primeFlag[1]=1;
  61.  
  62.     for(int i=4;i<=n;i+=2){
  63.         primeFlag[i]=1;
  64.     }
  65.  
  66.     int lim=sqrt(n+1);
  67.     for(int i=3;i<=lim;i+=2){
  68.         if(!primeFlag[i]){
  69.             for(int j=i*i;j<=n;j+=2*i){
  70.                 primeFlag[j]=1;
  71.             }
  72.         }
  73.     }
  74.  
  75.     for(int i=0;i<=n;i++){
  76.         if(!primeFlag[i]) seve[sidx++]=i;
  77.     }
  78. }
  79.  
  80. ///Binary Search
  81. int bs(int a[], int key, int l, int r)
  82. {
  83.     int mid=(l+r)/2;
  84.  
  85.     if(l>r) return -1;
  86.     if(a[mid]==key) return mid;
  87.     else if(a[mid]>key) return bs(a, key, l, mid);
  88.     else return bs(a, key, mid, r);
  89. }
  90.  
  91.  
  92. int perc=0;
  93. bool perFalg[MAX];
  94. vector<int> v;
  95. void per(int pos, int n)
  96. {
  97.     if(pos==n){
  98.         vout(v);
  99.         perc++;
  100.         return;
  101.     }
  102.  
  103.     // if(perc==10) return;
  104.  
  105.     for(int i=0;i<n;i++){
  106.         if(!perFalg[i]){
  107.             perFalg[i]=1;
  108.             v.push_back(i);
  109.             per(pos+1,n);
  110.             perFalg[i]=0;
  111.             v.pop_back();
  112.         }
  113.     }
  114. }
  115.  
  116. void comb(int a[],int pos, int n)
  117. {
  118.     if(pos==n){
  119.         vout(v);
  120.         return;
  121.     }
  122.  
  123.     v.push_back(a[pos]);
  124.     comb(a, pos+1, n);
  125.     v.pop_back();
  126.     comb(a, pos+1, n);
  127. }
  128.  
  129. llu factorial[22];
  130. void fact(int n)
  131. {
  132.     factorial[0]=1;
  133.     factorial[1]=1;
  134.     for(int i=2;i<=n;i++){
  135.         factorial[i]=factorial[i-1]*i;
  136.     }
  137. }
  138.  
  139. int n;
  140. int ba[11111];
  141. int lTemp=-1;
  142. int lmBS(int key)
  143. {
  144.     int l=0, r=n-1, mid=0;
  145.  
  146.     while(l<r){
  147.         mid=(l+r)/2;
  148.         //cout<<mid<<" "<<ba[mid]<<endl;
  149.         if(ba[mid]>key) r=mid-1;
  150.         else if(ba[mid]<key) l=mid+1;
  151.         else if(ba[mid]==key){ lTemp=mid; r=mid-1; }
  152.     }
  153.  
  154.     return lTemp;
  155. }
  156.  
  157. //int n;
  158. //int ba[11111];
  159. int rTemp=-1;
  160. int rmBS(int key)
  161. {
  162.     int l=0, r=n-1, mid=0;
  163.  
  164.     while(l<r){
  165.         mid=(l+r)/2;
  166.         //cout<<mid<<" "<<ba[mid]<<endl;
  167.         if(ba[mid]>key) r=mid-1;
  168.         else if(ba[mid]<key) l=mid+1;
  169.         else if(ba[mid]==key){ rTemp=mid; l=mid+1; }
  170.     }
  171.  
  172.     return rTemp;
  173. }
  174.  
  175. int sa[11][11];
  176.  
  177. void TwoDSort()
  178. {
  179.     for(int j=0;j<10;j++){     
  180.         for(int i=0;i<5;i++){
  181.             for(int k=i+1;k<5;k++){
  182.                 if(sa[i][j]<sa[k][j]){
  183.                     swap(sa[i],sa[k]);
  184.                 }
  185.             }
  186.         }
  187.         if(sa[0][j]!=sa[1][j]) break;
  188.     }
  189. }
  190.  
  191. vector<int> ff[111];
  192. void firstFit(int w[], int n, int k)
  193. {
  194.     int sum=0;
  195.     for(int i=0;i<n;i++) sum+=w[i];
  196.  
  197.     int bin=sum/k;
  198.     if(sum%k!=0) bin++;
  199.  
  200.     //cout<<bin<<endl;
  201.  
  202.     int csum[111];
  203.     for(int i=0;i<bin;i++) csum[i]=k;
  204.  
  205.     for(int i=0;i<n;i++){
  206.         for(int j=0;j<bin;j++){
  207.             if(csum[j]>=w[i]){
  208.                 ff[j].push_back(w[i]);
  209.                 csum[j]-=w[i];
  210.                 break;
  211.             }
  212.         }
  213.     }
  214.  
  215.     for(int i=0;i<bin;i++){
  216.         for(int j=0;j<ff[i].size();j++){
  217.             cout<<ff[i][j]<<" ";
  218.         }
  219.         cout<<endl;
  220.     }
  221.     cout<<endl;
  222. }
  223.  
  224. vector<int>ffni[111];
  225. void firstFitNI(int w[], int n, int k)
  226. {
  227.     int a[1111];
  228.     int sum=0;
  229.     for(int i=0;i<n;i++){
  230.         sum+=w[i];
  231.         a[i]=w[i];
  232.     }
  233.  
  234.     for(int i=0;i<n-1;i++){
  235.         for(int j=i+1;j<n;j++){
  236.             if(a[i]<a[j]) swap(a[i],a[j]);
  237.         }
  238.     }
  239.    
  240.     int bin=sum/k;
  241.     if(sum%k!=0) bin++;
  242.  
  243.     int csum[111];
  244.     for(int i=0;i<bin;i++) csum[i]=k;
  245.  
  246.     for(int i=0;i<n;i++){
  247.         for(int j=0;j<bin;j++){
  248.             if(csum[j]>=a[i]){
  249.                 ffni[j].push_back(a[i]);
  250.                 csum[j]-=a[i];
  251.                 break;
  252.             }
  253.         }
  254.     }
  255.  
  256.     for(int i=0;i<bin;i++){
  257.         for(int j=0;j<ffni[i].size();j++){
  258.             cout<<ffni[i][j]<<" ";
  259.         }
  260.         cout<<endl;
  261.     }
  262.     cout<<endl;
  263. }
  264.  
  265. vector<int>bf[1111];
  266. void bestFit(int w[], int n, int k)
  267. {
  268.     int sum=0;
  269.     for(int i=0;i<n;i++) sum+=w[i];
  270.  
  271.     int bin=sum/k;
  272.     if(sum%k!=0) bin++;
  273.  
  274.     int csum[1111];
  275.     for(int i=0;i<bin;i++) csum[i]=k;
  276.  
  277.     int mn=k;
  278.     int temp;
  279.     int idx;
  280.     for(int i=0;i<n;i++){
  281.         mn=k;
  282.         for(int j=0;j<bin;j++){
  283.             if(csum[j]>=w[i]){
  284.                 temp=csum[j]-w[i];
  285.                 if(temp<mn){
  286.                     mn=temp;
  287.                     idx=j;
  288.                 }
  289.             }
  290.         }
  291.         bf[idx].push_back(w[i]);
  292.         csum[idx]-=w[i];
  293.     }
  294.  
  295.     for(int i=0;i<bin;i++){
  296.         for(int j=0;j<bf[i].size();j++){
  297.             cout<<bf[i][j]<<" ";
  298.         }
  299.         cout<<endl;
  300.     }
  301.     cout<<endl;
  302. }
  303.  
  304. ///bitwise sieve
  305. bool check(int n, int pos)
  306. {
  307.     return (bool)(n & (1<<pos));
  308. }
  309. int Set(int n, int pos)
  310. {
  311.     return n=n | (1<<pos);
  312. }
  313. int status[111111111/32];
  314. // vector<int> bitv;
  315. int ccc=0;
  316. void bitSieve(int n)
  317. {
  318.     int sq=sqrt(n);
  319.     for(int i=3;i<=n+1;i+=2){
  320.         if(check(status[i/32],i%32)==0){
  321.             for(int j=i*i;j<=n;j+=2*i){
  322.                 status[j/32]=Set(status[j/32],j%32);
  323.             }
  324.         }
  325.     }
  326.     // bitv.push_back(2);
  327.     for(int i=3;i<=n;i+=2){
  328.         if( check(status[i/32],i%32)==0){
  329.             // bitv.push_back(i);
  330.             ccc++;
  331.         }
  332.     }
  333.  
  334.     cout<<ccc<<endl;
  335. }
  336.  
  337.  
  338. //Number of co-prime of n (euler's totient functio)
  339. int NOCP(int n)
  340. {
  341.     double rv=n*1.0;
  342.     for(int i=2;i<=sqrt(n)+1;i++){
  343.         if(n%i==0){
  344.             rv*=(1-(1/(i*1.0)));
  345.             while(n%i==0) n/=i;
  346.         }
  347.     }
  348.  
  349.     if(n>1) rv*=(1-(1/(n*1.0)));
  350.  
  351.     return (int)rv;
  352. }
  353.  
  354. //Number Of Divisors
  355. int NOD(int n)
  356. {
  357.     int rv=1;
  358.     int cunt;
  359.     for(int i=2;i<=sqrt(n)+1;i++){
  360.         if(n%i==0){
  361.             cunt=0;
  362.             while(n%i==0){
  363.                 n/=i;
  364.                 cunt++;
  365.             }
  366.             rv*=(cunt+1);
  367.         }
  368.     }
  369.     if(n>1) rv*=2;
  370.  
  371.     return rv;
  372. }
  373.  
  374. //Big mod
  375. ll bigmod(ll base, ll pw, ll mod)
  376. {
  377.     if(pw==0) return 1%mod;
  378.  
  379.     ll x=bigmod(base,pw/2,mod); //dividing the job into two parts(2^5=2^2&2^2)
  380.  
  381.     x=(x*x)%mod; //combining the divided parts
  382.  
  383.     if(pw%2!=0) x=(x*base)%mod; // if(powe if odd left part is being multiplied)
  384.  
  385.     return x;
  386. }
  387.  
  388. //Number add using string
  389. string digadd(string s1, string s2)
  390. {
  391.     reverse(s1.begin(),s1.end());
  392.     reverse(s2.begin(),s2.end());
  393.  
  394.     // cout<<s1<<" "<<s2<<endl;
  395.  
  396.     if(s1.size()<s2.size()) swap(s1,s2);
  397.  
  398.     // cout<<s1<<" "<<s2<<endl;
  399.  
  400.     string s3;
  401.  
  402.     bool carry=0;
  403.     int x, y;
  404.     for(int ii=0;ii<s1.size();ii++){
  405.         x=s1[ii]-'0';
  406.         if(ii<s2.size()) y=s2[ii]-'0';
  407.         else y=0;
  408.         x=x+y+carry;
  409.         if(x<10){
  410.             s3+=(x+'0');
  411.             carry=0;
  412.         }
  413.         else{
  414.             s3+=((x%10)+'0');
  415.             carry=1;
  416.         }
  417.     }
  418.     if(carry==1) s3+='1';
  419.  
  420.     reverse(s3.begin(),s3.end());
  421.     return s3;
  422. }
  423.  
  424. //Number multiply using string
  425. string digmul(string x, string y)
  426. {
  427.     reverse(x.begin(),x.end());
  428.     reverse(y.begin(),y.end());
  429.  
  430.     string s="0";
  431.     string temp;
  432.  
  433.     // int cunt=0;
  434.     int carry=0;
  435.     for(int i=0;i<y.size();i++){
  436.         temp.clear();
  437.         carry=0;
  438.         for(int j=0;j<x.size();j++){
  439.             int xx=x[j]-'0';
  440.             int yy=y[i]-'0';
  441.             int z=xx*yy;
  442.             z+=carry;
  443.             int md=z%10;
  444.             temp+=(md+'0');
  445.             carry=z/10;
  446.         }
  447.  
  448.         while(1){
  449.             if(carry==0) break;
  450.  
  451.             temp+=((carry%10)+'0');
  452.             carry/=10;
  453.         }
  454.  
  455.         reverse(temp.begin(),temp.end());
  456.         for(int ii=0;ii<i;ii++){
  457.             temp+='0';
  458.         }
  459.         // cout<<temp<<endl;
  460.         s=digadd(s,temp);
  461.     }
  462.  
  463.     return s;
  464. }
  465.  
  466.  
  467. // Number divide using string
  468. // result stored in a vector
  469. string digdiv(string s1, string s2)
  470. {
  471.     vector<int>v;
  472.     int y=0;
  473.     for(int i=0;i<s2.size();i++){
  474.         y=(y*10)+(s2[i]-'0');
  475.     }
  476.  
  477.     int x=0;
  478.     for(int i=0;i<s1.size();i++){
  479.         x=(x*10)+(s1[i]-'0');
  480.         if(x>=y){
  481.             v.push_back(x/y);
  482.             x=x%y;
  483.         }
  484.         else{
  485.             v.push_back(0);
  486.         }
  487.     }
  488.  
  489.     string s3;
  490.     bool f=0;
  491.     for(int i=0;i<v.size();i++){
  492.         if(v[i]==0){
  493.             if(f) s3+=(v[i]+'0');
  494.         }
  495.         else{
  496.             f=1;
  497.             s3+=(v[i]+'0');
  498.         }
  499.     }
  500.    
  501.     return s3;
  502. }
  503.  
  504.  
  505. //Factorial with modulus
  506. ll mFact[11111111];
  507. void modFact(ll modval)
  508. {  
  509.     mFact[0]=1;
  510.     for(int i=1;i<=10000000;i++){
  511.         mFact[i]=(((mFact[i-1]%modval)*(i%modval))%modval);
  512.     }
  513. }
  514.  
  515. //Inverse Mod
  516. ll invmod(ll y, ll x, ll modval)
  517. {
  518.     ll down=bigmod(x,modval-2,modval);
  519.  
  520.     return ((y%modval)*(down%modval))%modval;
  521. }
  522.  
  523. ll nCr(ll n, ll r, ll modval)
  524. {
  525.     // cout<<n<<" "<<mFact[n]<<endl;
  526.     // cout<<r<<" "<<mFact[r]<<endl;
  527.     // cout<<n-r<<" "<<mFact[n-r]<<endl;
  528.     ll rv=((mFact[n]%modval)*((bigmod(mFact[r],modval-2,modval))%modval)*((bigmod(mFact[n-r],modval-2,modval)%modval)))%modval;
  529.  
  530.     return rv;
  531. }
  532.  
  533. ll nCr2(ll n, ll r, ll modval) //its working
  534. {
  535.     ll rv=1;
  536.     ll x=r, y=n-r;
  537.     ll total=1;
  538.     if(x<y) swap(x,y);
  539.     ll temp=1;
  540.     for(ll i=n;i>x;i--){
  541.         total=((total%modval)*(i%modval))%modval;
  542.         if(temp<=y){
  543.             total=invmod(total,temp,MOD);
  544.             temp++;
  545.         }
  546.     }
  547.  
  548.     return total;
  549. }
  550.  
  551. //Fibonacci in log n  time
  552. ll fibn[111111];
  553. int fib(int n)
  554. {
  555.     if(n==0) return 0;
  556.     if(n==1 || n==2) return (fibn[n]=1);
  557.     if(fibn[n]!=-1) return fibn[n];
  558.  
  559.     int k;
  560.     if(n%2==0){
  561.         k=n/2;
  562.         fibn[n]= (2*fib(k-1)+fib(k))*fib(k);
  563.     }
  564.     else{
  565.         k=(n+1)/2;
  566.         fibn[n]= fib(k)*fib(k)+fib(k-1)*fib(k-1);
  567.     }
  568.  
  569.     return fibn[n];
  570. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement