个人简单题解

A. Everyone Loves Playing Games

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4. const int N = 1e4 + 5;
  5. int n, m;
  6. struct LB
  7. {
  8.     ll b[65];
  9.     void clear() { memset(b, 0, sizeof(b)); }
  10.     void ins(ll x)
  11.     {
  12.         for(int i=62; i>=0; i--)
  13.             if((x>>i)&1)
  14.             {
  15.                 if(!b[i])
  16.                 {
  17.                     b[i] = x;
  18.                     return;
  19.                 }
  20.                 x ^= b[i];
  21.             }
  22.     }
  23. }A, B;
  24. void solve()
  25. {
  26.     scanf("%d%d", &n, &m);
  27.     ll X = 0;
  28.     A.clear(), B.clear();
  29.     for(int i=1; i<=n; i++)
  30.     {
  31.         ll x, y; scanf("%lld%lld", &x, &y);
  32.         X ^= x;
  33.         A.ins(x^y);
  34.     }
  35.     for(int i=1; i<=m; i++)
  36.     {
  37.         ll x, y; scanf("%lld%lld", &x, &y);
  38.         X ^= x;
  39.         B.ins(x^y);
  40.     }
  41.     ll ans = X;
  42.     for(int i=62; i>=0; i--)
  43.     {
  44.         if(!A.b[i] && !B.b[i]) continue;
  45.         if(!A.b[i]) ans = min(ans, ans^B.b[i]);
  46.         else if(!B.b[i]) ans = max(ans, ans^A.b[i]);
  47.         else
  48.         {
  49.             if((ans>>i)&1) ans ^= A.b[i];
  50.             A.ins(A.b[i]^B.b[i]);
  51.         }
  52.     }
  53.     printf("%lld\n", ans);
  54. }
  55. int main()
  56. {
  57.     int _; scanf("%d", &_);
  58.     while(_--) solve();
  59.     return 0;
  60. }

D. String Theory

  1. #include<bits/stdc++.h>
  2. using namespace std ;
  3. const int maxn = 3e5 + 10 ;
  4. struct Sa
  5. {
  6.     int rk[maxn << 1] , sa[maxn << 1] , height[maxn << 1] ;
  7.     int tmp[maxn << 1] , cnt[maxn] ;
  8.     char s[maxn] ;
  9.     int st[maxn][25] ;
  10.     void cal(int n , int m)
  11.     {
  12.        n ++ ;
  13.        for(int i = 0 ; i < n * 2 + 5 ; i ++)
  14.          rk[i] = sa[i] = height[i] = tmp[i] = 0 ;
  15.        for(int i = 0 ; i < m ; i ++)  cnt[i] = 0 ;
  16.        for(int i = 0 ; i < n ; i ++)  cnt[rk[i] = s[i]] ++ ;
  17.        for(int i = 1 ; i < m ; i ++)  cnt[i] += cnt[i - 1] ;
  18.        for(int i = 0 ; i < n ; i ++)  sa[-- cnt[rk[i]]] = i ;
  19.        for(int k = 1 ; k <= n ; k <<= 1)
  20.        {
  21.          int j = 0 ;
  22.          for(int i = 0 ; i < n ; i ++)
  23.          {
  24.            j = sa[i] - k ;
  25.            if(j < 0)  j += n ;
  26.            tmp[cnt[rk[j]] ++] = j ;
  27.          }
  28.          sa[tmp[cnt[0] = 0]] = j = 0 ;
  29.          for(int i = 1 ; i < n ; i ++)
  30.          {
  31.            if(rk[tmp[i]] != rk[tmp[i - 1]]
  32.            || rk[tmp[i] + k] != rk[tmp[i - 1] + k])
  33.              cnt[++ j] = i ;
  34.            sa[tmp[i]] = j ;
  35.          }
  36.          memcpy(rk , sa , n * sizeof(int)) ;
  37.          memcpy(sa , tmp , n * sizeof(int)) ;
  38.          if(j >= n - 1)  break ;
  39.        }
  40.        height[0] = 0 ;
  41.        for(int i = 0 , k = 0 , j = rk[0] ; i < n - 1 ; i ++ , k ++)
  42.          while(~k && s[i] != s[sa[j - 1] + k])
  43.            height[j] = k -- , j = rk[sa[j] + 1] ;
  44.     }  
  45.     void build_lcp(int n)
  46.     {
  47.         for(int i = 1 ; i <= n ; i ++)  st[i][0] = height[i] ;
  48.         for(int j = 1 ; j <= 20 ; j ++)
  49.             for(int i = 1 ; i + (1 << j) - 1 <= n ; i ++)
  50.                 st[i][j] = min(st[i][j - 1] , st[i + (1 << (j - 1))][j - 1]) ;
  51.     }
  52.     int lcp(int l , int r)
  53.     {
  54.         if(l > r)  swap(l , r) ;
  55.         l ++ ;
  56.         int len = log2(r - l + 1) ;
  57.         return min(st[l][len] , st[r - (1 << len) + 1][len]) ;
  58.     }
  59. } sa[2] ;
  60. int main()
  61. {
  62.     std::ios::sync_with_stdio(false) , cin.tie(0) ;
  63.     int T ;
  64.     cin >> T ;
  65.     while(T --)
  66.     {
  67.         int k ;
  68.         cin >> k ;
  69.         cin >> sa[0].s ;
  70.         int len = strlen(sa[0].s) ;
  71.         if(k == 1)
  72.         {
  73.             cout << 1ll * len * (len + 1) / 2 << '\n' ;
  74.             continue ;
  75.         }
  76.         for(int i = 0 ; i < len ; i ++)  sa[1].s[i] = sa[0].s[len - 1 - i] ;
  77.         sa[0].cal(len , 200) ;
  78.         sa[0].build_lcp(len) ;
  79.         sa[1].cal(len , 200) ;
  80.         sa[1].build_lcp(len) ;
  81.         auto rev = [&](int x)
  82.         {
  83.             return len - 1 - x ;
  84.         } ;
  85.         long long ans = 0 ;
  86.         for(int i = 1 ; i <= len / k ; i ++)
  87.         {
  88.             for(int j = 0 ; j < len ; j += i)
  89.             {
  90.                 int p = j ;
  91.                 while(p + i < len && sa[0].lcp(sa[0].rk[p] , sa[0].rk[p + i]) >= i)  p += i ;
  92.                 if(p + i - 1 <= len - 1 && (p == j || sa[0].lcp(sa[0].rk[j] , sa[0].rk[p]) >= i))  p += i ;
  93.                 if((p - j) / i >= k - 1)
  94.                 {
  95.                     int x = p ;
  96.                     int lcp1 = 0 ;
  97.                     if(x < len)  lcp1 = sa[0].lcp(sa[0].rk[j] , sa[0].rk[x]) ;
  98.                     int y = j - 1 ;
  99.                     int lcp2 = 0 ;
  100.                     if(y >= 0)  lcp2 = sa[1].lcp(sa[1].rk[rev(j - 1)] , sa[1].rk[rev(j + i - 1)]) ;
  101.                     ans += max(0 , lcp1 + lcp2 + p - j - i * k + 1) ;
  102.                 }
  103.                 if(p > j)  j = p - i ;               
  104.             }
  105.         }
  106.         cout << ans << '\n' ;
  107.     }
  108.     return 0 ;
  109. }

J. Gaokao

  1. #include <iostream>
  2. using namespace std;
  3. long long count(long long a)
  4. {
  5.     long long count = 0;
  6.     while(a)
  7.     {
  8.         if(a % 2 == 1)
  9.         {
  10.             count++;
  11.         }
  12.         a /= 2;
  13.     }
  14.     return count;
  15. }
  16. int main(){
  17.   int t;
  18.   long long n;
  19.   cin >> t;
  20.   while(t--){
  21.         cin >> n;
  22.   cout << (1ll << count(n - 1)) << endl;
  23.   }
  24.   return 0;     
  25. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值