Advertisement
_ash__

Untitled

Nov 27th, 2020
1,401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.03 KB | None | 0 0
  1. // problem - I
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int M = 998244353;
  6. int main() {
  7.     ios::sync_with_stdio(0);
  8.     cin.tie(0);
  9.  
  10.     int n, k;
  11.     cin>>n>>k;
  12.  
  13.     long long ans = 0, must = 0;
  14.     for (int i=1; i<=n; i++) {
  15.         long long x;
  16.         cin>>x;
  17.  
  18.         long long rem = 1LL<<(k-__builtin_popcountll(must));
  19.         must |= x;
  20.         long long cur = 1LL<<(k-__builtin_popcountll(must));
  21.         ans += i*((rem-cur)%M);
  22.     }
  23.  
  24.  
  25.     cout<<ans%M<<endl;
  26. }
  27.  
  28.  
  29. // problem - B
  30. #include <bits/stdc++.h>
  31.  
  32. #include <ext/pb_ds/assoc_container.hpp>
  33. #include <ext/pb_ds/tree_policy.hpp>
  34.  
  35. #define pb push_back
  36. #define mp make_pair
  37. #define FOR(i,a,b) for(i=a ; i<=b ; i++)
  38. #define DBG printf("Hi\n")
  39. #define i64 long long int
  40. #define ui64 unsigned long long int
  41. #define xx first
  42. #define yy second
  43. #define ln 17
  44. #define off 302
  45.  
  46. #define IN freopen("circular_circles_input.txt","r",stdin)
  47. #define OUT freopen("output.txt","w",stdout)
  48. #define sq(x) ((x)*(x))
  49.  
  50. #define FASTIO ios_base::sync_with_stdio(false); cin.tie(NULL)
  51.  
  52. using namespace __gnu_pbds;
  53. using namespace std ;
  54.  
  55. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  56. typedef tree< i64, null_type, less<i64>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
  57. typedef pair<int,int> pii;
  58.  
  59.  
  60. #define log 20
  61. #define mod 1000000007LL
  62. #define INF 1000000000000000000LL
  63. #define maxn 2000005
  64.  
  65. const long double eps = 1e-9 ;
  66.  
  67. int main()
  68. {
  69.     int tc, t=1 ;
  70.  
  71.     scanf("%d",&tc) ;
  72.  
  73.     while( t++ <= tc )
  74.     {
  75.         int n ;
  76.  
  77.         scanf("%d",&n) ;
  78.  
  79.         multiset< pair<int,int> > leaf , nonleaf ;
  80.  
  81.         for(int i=1 ; i<=n ; i++)
  82.         {
  83.             int d ;
  84.             scanf("%d",&d) ;
  85.             if( d==1 ) leaf.insert( mp(0,d) ) ;
  86.             else nonleaf.insert(mp(0,d)) ;
  87.         }
  88.  
  89.         if(n==2)
  90.         {
  91.             printf("1\n") ;
  92.             continue ;
  93.         }
  94.         else{
  95.             printf("%d\n" , min(n/2, (int)nonleaf.size() ) ) ;
  96.             continue ;
  97.         }
  98.  
  99.         int ans = 0 ;
  100.  
  101.         while( nonleaf.size() > 0 )
  102.         {
  103.        //     for( auto l:leaf ) printf("(%d,%d)",l.xx,l.yy) ;
  104.        //     printf("   %d\n",nonleaf.size() ) ;
  105.  
  106.             auto itleaf = leaf.begin() ;
  107.             int mat = itleaf->xx ;
  108.             leaf.erase(itleaf) ;
  109.  
  110.             if( mat == 1 )
  111.             {
  112.                 auto itnonleaf = nonleaf.end() ;
  113.                 itnonleaf-- ;
  114.                 pair<int,int> p = *itnonleaf ;
  115.                 nonleaf.erase(itnonleaf) ;
  116.  
  117.                 p.yy-- ;
  118.                 if( p.yy==1 ) leaf.insert( p ) ;
  119.                 else nonleaf.insert(p) ;
  120.             }
  121.             else{
  122.                 auto itnonleaf = nonleaf.begin() ;
  123.                 pair<int,int> p = *itnonleaf ;
  124.                 nonleaf.erase(itnonleaf) ;
  125.  
  126.                 if( p.xx == 0 )
  127.                 {
  128.                     p.xx = 1 ;
  129.                     ans++ ;
  130.                 }
  131.                 p.yy-- ;
  132.                 if( p.yy==1 ) leaf.insert( p ) ;
  133.                 else nonleaf.insert(p) ;
  134.             }
  135.         }
  136.  
  137.         auto it1 = leaf.begin() ;
  138.         auto it2 = it1 ;
  139.         it2++ ;
  140.  
  141.         if( it1->yy == 0 && it2->yy == 0 ) ans++ ;
  142.  
  143.         printf("%d\n",ans) ;
  144.     }
  145.  
  146.     return 0 ;
  147. }
  148.  
  149. // problem - J
  150. #include <bits/stdc++.h>
  151. using namespace std;
  152.  
  153. #define Gene template< class
  154. #define Rics printer& operator,
  155. Gene c> struct rge{c b, e;};
  156. Gene c> rge<c> range(c i, c j){ return {i, j};}
  157. struct printer{
  158.     ~printer(){cerr<<endl;}
  159.     Gene c >Rics(c x){ cerr<<boolalpha<<x; return *this;}
  160.     Rics(string x){cerr<<x;return *this;}
  161.     Gene c, class d >Rics(pair<c, d> x){ return *this,"(",x.first,", ",x.second,")";}
  162.     Gene ... d, Gene ...> class c >Rics(c<d...> x){ return *this, range(begin(x), end(x));}
  163.     Gene c >Rics(rge<c> x){
  164.         *this,"["; for(auto it = x.b; it != x.e; ++it)
  165.             *this,(it==x.b?"":", "),*it; return *this,"]";}
  166. };
  167. #define debug() cerr<<"LINE "<<__LINE__<<" >> ", printer()
  168. #define dbg(x) "[",#x,": ",(x),"] "
  169. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  170. int my_rand(int l, int r) {
  171.     return uniform_int_distribution<int>(l, r) (rng);
  172. }
  173.  
  174.  
  175. const int N = 1e6+100;
  176. const int mod = 998244353;
  177.  
  178. vector<int> g[N];
  179. bool vis[N];
  180. int depth[N];
  181. int ans;
  182. int odd = 0, even = 0;
  183.  
  184. void dfs(int u, int p) {
  185.     vis[u] = true;
  186.     depth[u] = depth[p] + 1;
  187.     for(int v : g[u]) {
  188.         if(!vis[v]) {
  189.             dfs(v, u);
  190.         }
  191.         else {
  192.             if(v != p && depth[v] < depth[u]) {
  193.                 int parity = (depth[u] - depth[v] + 1) & 1;
  194.                 if(parity) odd++;
  195.                 else even++;
  196.             }
  197.         }
  198.     }
  199. }
  200.  
  201. vector<pair<int,int>> edges;
  202. int edge_val[N];
  203. int F[N];
  204. int brute_ans;
  205. int n, m;
  206.  
  207. void bktk(int pos) {
  208.     if(pos == edges.size()) {
  209.         bool ok = true;
  210.         for(int i = 1; i <= n; i++) {
  211.             if(F[i]%5 != 0) ok = false;
  212.         }
  213.         if(ok) {
  214. //            cout << "ways: " << endl;
  215. //            for(int i = 0; i < m; i++) {
  216. //                cout << edges[i].first << " " << edges[i].second << " -> " << edge_val[i] << endl;
  217. //            }
  218. //            for(int i = 1; i <= n; i++) {
  219. //                cout << i << " -> " << F[i] << endl;
  220. //            }
  221.         }
  222.         brute_ans += ok;
  223.         return;
  224.     }
  225.     int u = edges[pos].first, v = edges[pos].second;
  226.     for(int k = 0; k < 5; k++) {
  227.         edge_val[pos] = k;
  228.         bktk(pos+1);
  229.         F[u]++;
  230.         F[v]++;
  231.     }
  232. }
  233.  
  234. int bm(int b, int p) {
  235.     if(p == 0) return 1;
  236.     int t = bm(b, p/2);
  237.     t = 1ll * t * t % mod;
  238.     if(p & 1) return 1ll * t * b % mod;
  239.     return t;
  240. }
  241.  
  242. int main() {
  243. //    freopen("in.txt", "r", stdin);
  244.     ios::sync_with_stdio(0);
  245.     cin.tie(0);
  246.  
  247.     int tc;
  248.     cin >> tc;
  249.     set<int> all;
  250.  
  251.     while(tc--) {
  252. //        n = my_rand(2, 6);
  253. //        m = min(n * (n-1) /2, my_rand(0, 12));
  254.         cin >> n >> m;
  255.         for(int i = 1; i <= n; i++) {
  256.             g[i].clear();
  257.             vis[i] = false;
  258.             depth[i] = 0;
  259.         }
  260.         edges.clear();
  261.         set<pair<int,int>> sss;
  262.         for(int i = 0; i < m; i++) {
  263.             int u, v;
  264. //            u = my_rand(1, n);
  265. //            v = my_rand(1, n);
  266. //            if(u > v) swap(u, v);
  267.             cin >> u >> v;
  268. //            if(sss.count({u, v}) or u == v) {
  269. //                i++;
  270. //                continue;
  271. //            }
  272. //            sss.insert({u, v});
  273.             g[u].push_back(v);
  274.             g[v].push_back(u);
  275.             edges.push_back({u, v});
  276.         }
  277. //        brute_ans = 0;
  278. //        for(int i = 1; i <= n; i++) F[i] = 0;
  279. //        bktk(0);
  280. //        vector<int> pw(n + 1);
  281. //        pw[0] = 1;
  282. //        for(int i = 1; i <= n; i++) {
  283. //            pw[i] = 2*pw[i-1]%mod;
  284. //        }
  285.         int ans = 1;
  286.         for(int i = 1; i <= n; i++) {
  287.             if(!vis[i]) {
  288.                 odd = 0, even = 0;
  289.                 dfs(i, 0);
  290.                 int Rank = n-1;
  291.                 if(odd) Rank = n;
  292.                 int baki = n-1+even+odd-Rank;
  293.                 while(baki--) ans = 1ll * ans * 5 % mod;
  294.             }
  295.         }
  296. //        assert(ans == brute_ans);
  297.         cout << ans << "\n";
  298.     }
  299.  
  300. }
  301.  
  302.  
  303.  // problem F
  304. #include<bits/stdc++.h>
  305. using namespace std;
  306. #include <bits/stdc++.h>
  307. #define LL long long
  308. using namespace std;
  309.  
  310. const int N = 3e5+7;
  311. const long long INF = 1e18;
  312. int a[N];
  313. LL tr[4*N];
  314. LL lz[4*N];
  315.  
  316. ///2. Push lazy down and merge lazy
  317. void propagate(int u, int st, int en) {
  318.     tr[u] += lz[u];
  319.     if (st!=en) {
  320.         lz[2*u] += lz[u];
  321.         lz[2*u+1] += lz[u];
  322.     }
  323.     lz[u] = 0;
  324. }
  325.  
  326.  
  327. void update(int u, int st, int en, int l, int r, LL x) {
  328.     propagate(u, st, en);
  329.     if (r<st || en<l)  return;
  330.     else if (l<=st && en<=r) {
  331.         lz[u] += x;             ///4. Merge lazy
  332.         propagate(u, st, en);
  333.     }
  334.     else {
  335.         int mid = (st+en)/2;
  336.         update(2*u, st, mid, l, r, x);
  337.         update(2*u+1, mid+1, en, l, r, x);
  338.         tr[u] = min(tr[2*u], tr[2*u+1]);
  339.     }
  340. }
  341.  
  342. LL query(int u, int st, int en, int l, int r) {
  343.     propagate(u, st, en);
  344.     if (r<st || en<l)  return INF;        /// 5. Proper null value
  345.     else if (l<=st && en<=r)    return tr[u];
  346.     else {
  347.         int mid = (st+en)/2;
  348.         return min(query(2*u, st, mid, l, r), query(2*u+1, mid+1, en, l, r));
  349.     }
  350. }
  351.  
  352. void debug(int u, int st, int en) {
  353.     cout<<"--->"<<u<<" "<<st<<" "<<en<<" "<<tr[u]<<" "<<lz[u]<<endl;
  354.     if (st==en) return;
  355.     int mid = (st+en)/2;
  356.     debug(2*u, st, mid);
  357.     debug(2*u+1, mid+1, en);
  358. }
  359.  
  360.  
  361. int x[N], y[N];
  362.  
  363. int main() {
  364.     ios::sync_with_stdio(0);
  365.     cin.tie(0);
  366.  
  367.     int n, a, b;
  368.     cin>>n>>a>>b;
  369.  
  370.     vector<int> v;
  371.     update(1,0,n,0,n,1);
  372.  
  373.     for (int i=1; i<=n; i++) {
  374.         int h;
  375.         cin>>h;
  376.  
  377.         x[i] = (h-1)/b;
  378.         int left = h - x[i]*b;
  379.         assert(left > 0);
  380.         y[i] = (left+a-1)/a;
  381.  
  382.         v.push_back(i);
  383.  
  384.         update(1,0,n,i,n,x[i]+1);
  385.     }
  386.  
  387.     sort(v.begin(), v.end(), [](int a, int b) {return y[a] == y[b] ? a > b : y[a] < y[b];});
  388.  
  389.     int ans = 0;
  390.     for (int i=0; i<n; i++) {
  391.         int idx = v[i];
  392.         update(1,0,n,idx,n,-x[idx]-1);
  393.         update(1,0,n,idx,n,x[idx]-y[idx]);
  394.         int z = query(1,0,n,0,n);
  395.         if (z < 0) {
  396.             update(1,0,n,idx,n,x[idx]+1);
  397.             update(1,0,n,idx,n,-x[idx]+y[idx]);
  398.         }
  399.         else ans++;
  400.     }
  401.     cout<<ans<<endl;
  402. }
  403.  
  404. // problem - E
  405.  
  406. #include <bits/stdc++.h>
  407. using namespace std;
  408.  
  409. #define Gene template< class
  410. #define Rics printer& operator,
  411. Gene c> struct rge{c b, e;};
  412. Gene c> rge<c> range(c i, c j){ return {i, j};}
  413. struct printer{
  414.     ~printer(){cerr<<endl;}
  415.     Gene c >Rics(c x){ cerr<<boolalpha<<x; return *this;}
  416.     Rics(string x){cerr<<x;return *this;}
  417.     Gene c, class d >Rics(pair<c, d> x){ return *this,"(",x.first,", ",x.second,")";}
  418.     Gene ... d, Gene ...> class c >Rics(c<d...> x){ return *this, range(begin(x), end(x));}
  419.     Gene c >Rics(rge<c> x){
  420.         *this,"["; for(auto it = x.b; it != x.e; ++it)
  421.             *this,(it==x.b?"":", "),*it; return *this,"]";}
  422. };
  423. #define debug() cerr<<"LINE "<<__LINE__<<" >> ", printer()
  424. #define dbg(x) "[",#x,": ",(x),"] "
  425. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  426. int my_rand(int l, int r) {
  427.     return uniform_int_distribution<int>(l, r) (rng);
  428. }
  429.  
  430.  
  431. int main() {
  432. //    freopen("in.txt", "r", stdin);
  433.     ios::sync_with_stdio(0);
  434.     cin.tie(0);
  435.  
  436.     int n;
  437.     cin >> n;
  438.     vector<int> a(n+1);
  439.     for(int i = 0; i < n; i++) {
  440.         int x;
  441.         cin >> x;
  442.         a[x] ^= 1;
  443.     }
  444.     vector<bool> good(n+1);
  445.  
  446.     vector<int> piles;
  447.     for(int i = 1; i <= n; i++) if(a[i]) piles.push_back(i);
  448. //    debug(), dbg(piles);
  449.     if(piles.size() <= 500) {
  450.         for(int x = 1; x <= n; x++) {
  451.             int cnt = 0;
  452.             for(int y : piles) {
  453.                 int z = y%(x+1);
  454. //                debug(), dbg(y), dbg(z);
  455.                 cnt ^= z;
  456.             }
  457. //            debug(), dbg(cnt);
  458.             if(cnt) good[x] = true;
  459.         }
  460.         for(int i = 1; i <= n; i++) {
  461.             if(good[i]) cout << "Alice ";
  462.             else cout << "Bob ";
  463.         }
  464.         return 0;
  465.     }
  466.  
  467.     for(int i = 1; i <= n; i++) {
  468.         a[i] ^= a[i-1];
  469.     }
  470.     for(int k = 18; k >= 0; k--) {
  471.         for(int i = 1; i <= n; i++) {
  472.             if(good[i]) continue;
  473.             int x = i+1;
  474.             int cnt = 0;
  475.             int sz = (1<<k);
  476.             for(int l = 0; l <= n; l += x) {
  477.                 int r = min(l+x-1, n);
  478.                 for(int bl = l+sz; bl <= r; bl += (sz<<1)) {
  479.                     int br = min(r, bl+sz-1);
  480.                     cnt ^= a[br]^a[bl - 1];
  481.                 }
  482.             }
  483.             if(cnt) good[i] = true;
  484.         }
  485. //        debug(), dbg(k), dbg(good);
  486.     }
  487.     for(int i = 1; i <= n; i++) {
  488.         if(good[i]) cout << "Alice ";
  489.         else cout << "Bob ";
  490.     }
  491. }
  492.  
  493.  
  494.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement