[关闭]
@baobaobear 2020-04-12T10:29:28.000000Z 字数 14760 阅读 194

Contest 23

contest


A 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for(int i=a;i<=n;i++)
  4. #define per(i,a,n) for(int i=n;i>=a;i--)
  5. #define fi first
  6. #define se seconde
  7. #define pb push_back()
  8. #define SZ(x) ((int)(x).size())
  9. typedef long long ll;
  10. typedef pair<int,int> pii;
  11. typedef double db;
  12. ll k,n,ans;
  13. int main(){
  14. cin>>n>>k;
  15. if(!k){
  16. cout<<n*n<<endl;
  17. return 0;
  18. }
  19. rep(i,k+1,n){
  20. ans+=(n/(ll)i*((ll)i-k));
  21. if(n%i){
  22. ans+=max(0ll,n%i-k+1);
  23. }
  24. }
  25. cout<<ans<<endl;
  26. return 0;
  27. }

B b756256

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e6+10;
  4. bool vis[N];
  5. int main() {
  6. string s;
  7. cin >> s;
  8. stack<int>st;
  9. int ls=s.size();
  10. for(int i=0;i<ls;i++) {
  11. if(s[i]=='(') st.push(i);
  12. else
  13. if(!st.empty()) {
  14. vis[i] = true;
  15. vis[st.top()] = true;
  16. st.pop();
  17. }
  18. }
  19. int cnt = 0,ans = 0,sum = 0;
  20. for(int i=0;i<ls;i++) {
  21. if(vis[i]) cnt++;
  22. else cnt = 0;
  23. if(cnt == ans && ans) sum++;
  24. else if(cnt > ans) sum = 1,ans = cnt;
  25. }
  26. if(ans) printf("%d %d\n",ans,sum);
  27. else cout << "0 1" << endl;
  28. }

C djddskkekk

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. const int maxn = 2e5 + 10;
  5. int n , z , a [ maxn ] , sum;
  6. int main ( void )
  7. {
  8. cin >> n >> z;
  9. for ( int i = 0 ; i < n ; i++ ) cin >> a [ i ];
  10. sort ( a , a + n );
  11. int i = 0 , j = n / 2;
  12. while ( i < n / 2 && j < n ) {
  13. if ( abs ( a [ i ] - a [ j ] ) >= z ) {
  14. sum++; i++; j++;
  15. } else {
  16. j++;
  17. }
  18. }
  19. cout << sum << endl;
  20. return 0;
  21. }

D djddskkekk

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. #define int long long
  5. int a , b;
  6. vector < int > s;
  7. signed main ( void )
  8. {
  9. cin >> a >> b;
  10. while ( a != b ) {
  11. while ( a % 2 == 0 ) {
  12. s.push_back ( 1 );
  13. a /= 2;
  14. }
  15. while ( b % 2 == 0 ) {
  16. s.push_back ( 2 );
  17. b /= 2;
  18. }
  19. if ( a == b ) break;
  20. if ( a < b ) {
  21. b += a;
  22. s.push_back ( 3 );
  23. } else {
  24. a += b;
  25. s.push_back ( 4 );
  26. }
  27. }
  28. cout << s.size ( ) << endl;
  29. for ( int i = 0 ; i < s.size ( ) ; i++ ) {
  30. if ( s [ i ] == 1 ) {
  31. cout << "B+=B" << endl;
  32. } else if ( s [ i ] == 2 ) {
  33. cout << "A+=A" << endl;
  34. } else if ( s [ i ] == 3 ) {
  35. cout << "B+=A" << endl;
  36. } else {
  37. cout << "A+=B" << endl;
  38. }
  39. }
  40. return 0;
  41. }

E yingyingying777

  1. import java.util.Scanner;
  2. public class Main
  3. {
  4. public static int n,m,x1,y1,x2,y2;
  5. public static void main(String[] args) {
  6. Scanner sc=new Scanner(System.in);
  7. n=sc.nextInt();
  8. m=sc.nextInt();
  9. x1=sc.nextInt();
  10. y1=sc.nextInt();
  11. x2=sc.nextInt();
  12. y2=sc.nextInt();
  13. int d_x=Math.abs(x1-x2);
  14. int d_y=Math.abs(y1-y2);
  15. if(d_x<=3&&d_y<=3)
  16. System.out.println("First");
  17. else if(d_x<=4&&d_y<=4)
  18. {
  19. if(d_x+d_y<=6)
  20. System.out.println("First");
  21. else
  22. System.out.println("Second");
  23. }
  24. else
  25. System.out.println("Second");
  26. sc.close();
  27. }
  28. }

F djddskkekk

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int n , ret;
  5. vector < int > a;
  6. int main ( void )
  7. {
  8. cin >> n;
  9. a.push_back ( 1 );
  10. while ( 1 ) {
  11. ret = 0;
  12. for ( int i = a.size ( ) - 1 ; i >= 0 ; i-- ) {
  13. ret = ( ret * 10 + a [ i ] ) % n;
  14. }
  15. if ( ret == 0 ) {
  16. break;
  17. } else {
  18. int number = 0;
  19. a [ number ]++;
  20. while ( 1 ) {
  21. if ( a [ number ] > 1 ) {
  22. if ( number + 1 >= a.size ( ) ) {
  23. a.push_back ( 1 );
  24. a [ number ] = 0;
  25. break;
  26. } else {
  27. a [ number ] = 0;
  28. a [ number + 1 ]++;
  29. number++;
  30. }
  31. } else {
  32. break;
  33. }
  34. }
  35. }
  36. }
  37. for ( int i = a.size ( ) - 1 ; i >= 0 ; i-- ) {
  38. cout << a [ i ];
  39. }
  40. cout << endl;
  41. return 0;
  42. }

G likailin

  1. #include<bits/stdc++.h>
  2. #define ios std::ios::sync_with_stdio(false)
  3. #define sd(n) scanf("%d",&n)
  4. #define sdd(n,m) scanf("%d%d",&n,&m)
  5. #define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)
  6. #define pd(n) printf("%d\n", (n))
  7. #define pdd(n,m) printf("%d %d\n", n, m)
  8. #define pld(n) printf("%lld\n", n)
  9. #define pldd(n,m) printf("%lld %lld\n", n, m)
  10. #define sld(n) scanf("%lld",&n)
  11. #define sldd(n,m) scanf("%lld%lld",&n,&m)
  12. #define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)
  13. #define sf(n) scanf("%lf",&n)
  14. #define sff(n,m) scanf("%lf%lf",&n,&m)
  15. #define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)
  16. #define rep(i,a,n) for (int i=a;i<=n;i++)
  17. #define per(i,n,a) for (int i=n;i>=a;i--)
  18. #define mm(a,n) memset(a, n, sizeof(a))
  19. #define pb push_back
  20. #define all(x) (x).begin(),(x).end()
  21. #define fi first
  22. #define se second
  23. #define il inline
  24. #define int long long
  25. #define ll long long
  26. #define ull unsigned long long
  27. #define MOD 1000000007
  28. #define pi 3.14159265358979323
  29. #define debug(x) cout <<#x<<": "<<x<<endl;
  30. #define debug2(x, y) cout <<#x<<": "<<x<<" | "<<#y<<": "<<y<<endl;
  31. #define debug3(x, y, z) cout <<#x<<": "<<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<endl;
  32. #define debug4(a, b, c, d) cout <<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<endl;
  33. using namespace std;
  34. const ll INF (0x3f3f3f3f3f3f3f3fll);
  35. const int inf (0x3f3f3f3f);
  36. template<typename T>void read(T &res){bool flag=false;char ch;while(!isdigit(ch=getchar()))(ch=='-')&&(flag=true);
  37. for(res=ch-48;isdigit(ch=getchar());res=(res<<1)+(res<<3)+ch - 48);flag&&(res=-res);}
  38. template<typename T>void Out(T x){if(x<0)putchar('-'),x=-x;if(x>9)Out(x/10);putchar(x%10+'0');}
  39. ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  40. ll lcm(ll a,ll b){return a*b/gcd(a,b);}
  41. ll pow_mod(ll x,ll n,ll mod){ll res=1;while(n){if(n&1)res=res*x%mod;x=x*x%mod;n>>=1;}return res;}
  42. ll fact_pow(ll n,ll p){ll res=0;while(n){n/=p;res+=n;}return res;}
  43. ll mult(ll a,ll b,ll p){a%=p;b%=p;ll r=0,v=a;while(b){if(b&1){r+=v;if(r>p)r-=p;}v<<=1;if(v>p)v-=p;b>>=1;}return r;}
  44. ll quick_pow(ll a,ll b,ll p){ll r=1,v=a%p;while(b){if(b&1)r=mult(r,v,p);v=mult(v,v,p);b>>=1;}return r;}
  45. bool CH(ll a,ll n,ll x,ll t)
  46. {ll r=quick_pow(a,x,n);ll z=r;for(ll i=1;i<=t;i++){r=mult(r,r,n);if(r==1&&z!=1&&z!=n-1)return true;z=r;}return r!=1;}
  47. bool Miller_Rabin(ll n)
  48. {if(n<2)return false;if(n==2)return true;if(!(n&1))return false;ll x=n-1,t=0;while(!(x&1)){x>>=1;t++;}srand(time(NULL));
  49. ll o=8;for(ll i=0;i<o;i++){ll a=rand()%(n-1)+1;if(CH(a,n,x,t))return false;}return true;}
  50. void exgcd(ll a,ll b ,ll &x,ll &y){if(!b){x=1,y=0;return;}exgcd(b,a%b,x,y);ll t=x;x=y,y=t-(a/b)*y;}
  51. ll inv(ll a,ll b){ll x,y;return exgcd(a,b,x,y),(x%b+b)%b;}
  52. ll crt(ll x,ll p,ll mod){return inv(p/mod,mod)*(p/mod)*x;}
  53. ll fac(ll x,ll a,ll b)
  54. {if(!x)return 1;ll ans=1;for(ll i=1;i<=b;i++)if(i%a)ans*=i,ans%=b;
  55. ans=pow_mod(ans,x/b,b);for(ll i=1;i<=x%b;i++)if(i%a)ans*=i,ans%=b;return ans*fac(x/a,a,b)%b;}
  56. ll C(ll n,ll m,ll a,ll b)
  57. {ll N=fac(n,a,b),M=fac(m,a,b),Z=fac(n-m,a,b),sum=0,i;for(i=n;i;i=i/a)sum+=i/a;
  58. for(i=m;i;i=i/a)sum-=i/a;for(i=n-m;i;i=i/a)sum-=i/a;return N*pow_mod(a,sum,b)%b*inv(M,b)%b*inv(Z,b)%b;}
  59. ll exlucas(ll n,ll m,ll p)
  60. {ll t=p,ans=0,i;for(i=2;i*i<=p;i++){ll k=1;while(t%i==0){k*=i,t/=i;}
  61. ans+=crt(C(n,m,i,k),p,k),ans%=p;}if(t>1)ans+=crt(C(n,m,t,t),p,t),ans%=p;return ans % p;}
  62. /*
  63. int prime[100000],minprime[100000];
  64. void euler(int n)
  65. {int c=0,i,j;for(i=2;i<=n;i++){if(!minprime[i])prime[++c]=i,minprime[i]=i;for(j=1;j<=c&&i*prime[j]<=n;j++)
  66. {minprime[i*prime[j]]=prime[j];if(i%prime[j]==0)break;}}}
  67. struct Tree{ll l,r,sum,lazy,maxn,minn;}tree[100000];
  68. il void push_up(ll rt)
  69. {tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
  70. tree[rt].maxn=max(tree[rt<<1].maxn,tree[rt<<1|1].maxn);
  71. tree[rt].minn=min(tree[rt<<1].minn,tree[rt<<1|1].minn);}
  72. il void push_down(ll rt , ll length)
  73. {if(tree[rt].lazy){tree[rt<<1].lazy+=tree[rt].lazy;tree[rt<<1|1].lazy+=tree[rt].lazy;
  74. tree[rt<<1].sum+=(length-(length>>1))*tree[rt].lazy;tree[rt<<1|1].sum+=(length>>1)*tree[rt].lazy;
  75. tree[rt<<1].minn+=tree[rt].lazy;tree[rt<<1|1].minn+=tree[rt].lazy;
  76. tree[rt<<1].maxn+=tree[rt].lazy;tree[rt<<1|1].maxn+=tree[rt].lazy;tree[rt].lazy=0;}}
  77. il void build(ll l , ll r , ll rt , ll *aa)
  78. {tree[rt].lazy=0;tree[rt].l=l;tree[rt].r=r;if(l==r)
  79. {tree[rt].sum=aa[l];tree[rt].minn=tree[rt].sum;tree[rt].maxn=tree[rt].sum;return;}
  80. ll mid=(l+r)>>1;build(l,mid,rt<<1,aa);build(mid+1,r,rt<<1|1,aa);push_up(rt);}
  81. il void update_range(ll L , ll R , ll key , ll rt)
  82. {if(tree[rt].r<L||tree[rt].l>R)return;if(L<=tree[rt].l&&R>=tree[rt].r){tree[rt].sum+=(tree[rt].r-tree[rt].l+1)*key;
  83. tree[rt].minn+=key;tree[rt].maxn+=key;tree[rt].lazy+=key;return;}push_down(rt,tree[rt].r-tree[rt].l+1);
  84. ll mid=(tree[rt].r+tree[rt].l)>>1;if(L<=mid)update_range(L,R,key,rt << 1);
  85. if(R>mid)update_range(L,R,key,rt << 1 | 1);push_up(rt);}
  86. il ll query_range(ll L, ll R, ll rt)
  87. {if(L<=tree[rt].l&&R>=tree[rt].r){return tree[rt].sum;}push_down(rt,tree[rt].r-tree[rt].l+1);
  88. ll mid=(tree[rt].r+tree[rt].l)>>1;ll ans=0;if(L<=mid)ans+=query_range(L,R,rt << 1);
  89. if(R>mid)ans+=query_range(L,R,rt << 1 | 1);return ans;}
  90. il ll query_min(ll L,ll R,ll rt)
  91. {if(L<=tree[rt].l&&R>=tree[rt].r){return tree[rt].minn;}push_down(rt,tree[rt].r-tree[rt].l+1);
  92. ll mid=(tree[rt].r+tree[rt].l)>>1;ll ans=(0x3f3f3f3f3f3f3f3fll);if(L<=mid)ans=min(ans,query_min(L,R,rt << 1));
  93. if(R>mid)ans=min(ans,query_min(L,R,rt << 1 | 1));return ans;}
  94. il ll query_max(ll L, ll R, ll rt)
  95. {if(L<=tree[rt].l&&R>=tree[rt].r){return tree[rt].maxn;}push_down(rt,tree[rt].r-tree[rt].l+1);
  96. ll mid=(tree[rt].r+tree[rt].l)>>1;ll ans=-(0x3f3f3f3f3f3f3f3fll);if(L<=mid)ans=max(ans,query_max(L,R,rt << 1));
  97. if(R>mid)ans=max(ans,query_max(L,R,rt << 1 | 1));return ans;}
  98. */
  99. const int N = 2e5 + 10;
  100. int dp[N];
  101. signed main()
  102. {
  103. ios;
  104. int n; cin>>n;
  105. int ans = 0;
  106. rep(i, 1, n){
  107. int x; cin >> x;
  108. int m = sqrt(x), ma = 0;
  109. vector<int> cur;
  110. rep(j, 2, m){
  111. while(x % j==0){
  112. ma = max(ma, dp[j]);
  113. cur.push_back(j);
  114. x /= j;
  115. }
  116. }
  117. if(x > 1) ma = max(ma, dp[x]), cur.push_back(x);
  118. ma++;
  119. ans = max(ans, ma);
  120. for(auto c : cur) dp[c] = ma;
  121. }
  122. cout << ans << endl;
  123. return 0;
  124. }

H 194115062039

  1. #include<stdio.h>
  2. #include<string.h>
  3. int min(int a,int b){return a<b?a:b;}
  4. int main()
  5. {
  6. int pos[28],dis;
  7. int n;
  8. long long tot=0,dp[105][105],k;
  9. char ch[105];
  10. scanf("%d%lld",&n,&k);
  11. getchar();
  12. scanf("%s",ch+1);
  13. for(int i=0;i<105;i++)
  14. {
  15. for(int j=0;j<105;j++)dp[i][j]=0;
  16. dp[i][0]=1;
  17. }
  18. for(int i=0;i<28;i++)pos[i]=-1;
  19. /*
  20. for(int i=0;i<n;i++)
  21. {
  22. for(int j=0;j<=i+1;j++)
  23. {
  24. if(i>0)dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
  25. else dp[i][j]=1;
  26. }
  27. }*/
  28. for(int i=1;i<=n;i++)
  29. {
  30. for(int j=1;j<=i;j++)
  31. {
  32. /*if(i>0&&j>0)dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
  33. else if(i==0)dp[i][j]=1;
  34. else if(j==0)dp[i][j]=1+dp[i-1][j];*/
  35. dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
  36. if(pos[ch[i]-'a']==-1)continue;
  37. //int cc=pos[ch[i]-'a'-1];
  38. dis=i-pos[ch[i]-'a'];
  39. if(dis<=j)dp[i][j]-=dp[pos[ch[i]-'a']-1][j-dis];
  40. }
  41. pos[ch[i]-'a']=i;
  42. }
  43. for(long long i=0;i<=n;i++)
  44. {
  45. if(k<=dp[n][i])
  46. {
  47. tot+=k*i;
  48. k=0;
  49. break;
  50. }
  51. tot+=dp[n][i]*i;
  52. k-=dp[n][i];
  53. if(k<=0)break;
  54. }
  55. if(k<=0)printf("%lld\n",tot);
  56. else printf("-1\n");
  57. }

I djddskkekk

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int maxn = 4e5 + 10;
  6. int trie [ maxn << 5 ] [ 2 ] , cnt;
  7. struct {
  8. void insert ( int n )
  9. {
  10. int m = 0;
  11. for ( int i = 30 ; i >= 0 ; i-- ) {
  12. int v = ( n >> i ) & 1;
  13. if ( trie [ m ] [ v ] == 0 ) {
  14. trie [ m ] [ v ] = ++cnt;
  15. }
  16. m = trie [ m ] [ v ];
  17. }
  18. }
  19. int dis ( int n )
  20. {
  21. int m = 0 , sum = 0;
  22. for ( int i = 30 ; i >= 0 ; i-- ) {
  23. int v = ( n >> i ) & 1;
  24. if ( trie [ m ] [ v ^ 1 ] == 0 ) sum <<= 1 , m = trie [ m ] [ v ];
  25. else sum = ( sum << 1 | 1 ) , m = trie [ m ] [ v ^ 1 ];
  26. }
  27. return sum;
  28. }
  29. void init ( )
  30. {
  31. memset ( trie , 0 , sizeof ( trie [ 0 ] ) * ( cnt + 1 ) );
  32. cnt = 0;
  33. }
  34. } Tree;
  35. int a [ maxn ] , number [ maxn ] , number_2 [ maxn ] , sum_1 [ maxn ] , sum_2 [ maxn ] , k;
  36. int main ( void )
  37. {
  38. ios::sync_with_stdio ( false ); cin.tie ( 0 ); cout.tie ( 0 );
  39. cin >> k; cnt = 0;
  40. for ( int i = 1 ; i <= k ; i++ ) {
  41. cin >> a [ i ];
  42. number [ i ] = number [ i - 1 ] ^ a [ i ];
  43. }
  44. for ( int i = k ; i >= 0 ; i-- ) {
  45. number_2 [ i ] = number_2 [ i + 1 ] ^ a [ i ];
  46. }
  47. Tree.init ( );
  48. for ( int i = k ; i >= 0 ; i-- ) {
  49. sum_1 [ i ] = max ( Tree.dis ( number [ i ] ) , sum_1 [ i + 1 ] );
  50. Tree.insert ( number [ i ] );
  51. }
  52. Tree.init ( );
  53. for ( int i = 1 ; i <= k + 1 ; i++ ) {
  54. sum_2 [ i ] = max ( Tree.dis ( number_2 [ i ] ) , sum_2 [ i - 1 ] );
  55. Tree.insert ( number_2 [ i ] );
  56. }
  57. long long ans = 0;
  58. for ( int i = 0 ; i <= k ; i++ ) {
  59. ans = max ( ans , ( long long ) sum_1 [ i ] + sum_2 [ i + 1 ] );
  60. }
  61. cout << ans << endl;
  62. return 0;
  63. }

J 194115062039

  1. #include<stdio.h>
  2. int alphafs(int as,int bs);
  3. int betafs(int as,int bs);
  4. bool line[18];
  5. int linecheck(int i)
  6. {
  7. int total=0;
  8. if(i==0){line[0]=true;if(line[1]==true&&line[2]==true)total++;return total;}
  9. if(i==1){line[1]=true;if(line[0]==true&&line[2]==true)total++;return total;}
  10. if(i==2){line[2]=true;if(line[0]==true&&line[1]==true)total++;if(line[4]==true&&line[6]==true)total++;return total;}
  11. if(i==3){line[3]=true;if(line[4]==true&&line[5]==true)total++;return total;}
  12. if(i==4){line[4]=true;if(line[3]==true&&line[5]==true)total++;if(line[2]==true&&line[6]==true)total++;return total;}
  13. if(i==5){line[5]=true;if(line[3]==true&&line[4]==true)total++;if(line[10]==true&&line[12]==true)total++;return total;}
  14. if(i==6){line[6]=true;if(line[7]==true&&line[8]==true)total++;if(line[2]==true&&line[4]==true)total++;return total;}
  15. if(i==7){line[7]=true;if(line[6]==true&&line[8]==true)total++;return total;}
  16. if(i==8){line[8]=true;if(line[6]==true&&line[7]==true)total++;if(line[13]==true&&line[15]==true)total++;return total;}
  17. if(i==9){line[9]=true;if(line[10]==true&&line[11]==true)total++;return total;}
  18. if(i==10){line[10]=true;if(line[9]==true&&line[11]==true)total++;if(line[5]==true&&line[12]==true)total++;return total;}
  19. if(i==11){line[11]=true;if(line[9]==true&&line[10]==true)total++;return total;}
  20. if(i==12){line[12]=true;if(line[13]==true&&line[14]==true)total++;if(line[5]==true&&line[10]==true)total++;return total;}
  21. if(i==13){line[13]=true;if(line[12]==true&&line[14]==true)total++;if(line[8]==true&&line[15]==true)total++;return total;}
  22. if(i==14){line[14]=true;if(line[12]==true&&line[13]==true)total++;return total;}
  23. if(i==15){line[15]=true;if(line[16]==true&&line[17]==true)total++;if(line[8]==true&&line[13]==true)total++;return total;}
  24. if(i==16){line[16]=true;if(line[15]==true&&line[17]==true)total++;return total;}
  25. if(i==17){line[17]=true;if(line[15]==true&&line[16]==true)total++;return total;}
  26. }
  27. int transform(int a,int b)
  28. {
  29. if(a==1&&b==2)return linecheck(0);
  30. if(a==1&&b==3)return linecheck(1);
  31. if(a==2&&b==3)return linecheck(2);
  32. if(a==2&&b==4)return linecheck(3);
  33. if(a==2&&b==5)return linecheck(4);
  34. if(a==4&&b==5)return linecheck(5);
  35. if(a==3&&b==5)return linecheck(6);
  36. if(a==3&&b==6)return linecheck(7);
  37. if(a==5&&b==6)return linecheck(8);
  38. if(a==4&&b==7)return linecheck(9);
  39. if(a==4&&b==8)return linecheck(10);
  40. if(a==7&&b==8)return linecheck(11);
  41. if(a==5&&b==8)return linecheck(12);
  42. if(a==5&&b==9)return linecheck(13);
  43. if(a==8&&b==9)return linecheck(14);
  44. if(a==6&&b==9)return linecheck(15);
  45. if(a==6&&b==10)return linecheck(16);
  46. if(a==9&&b==10)return linecheck(17);
  47. }
  48. int alphafs(int as,int bs)
  49. {
  50. int score=0,v=0,flag=0;
  51. if(as>=5)return -1;
  52. if(bs>=5)return 1;
  53. for(int i=0;i<18;i++)
  54. {
  55. score=0;
  56. if(line[i]==false)score=linecheck(i);
  57. else continue;
  58. flag=1;
  59. if(score==0)v=betafs(as,bs);
  60. else v=alphafs(as+score,bs);
  61. line[i]=false;
  62. if(v<0)return -1;
  63. }
  64. if(flag==0&&bs>as)return 1;
  65. if(flag==0&&bs<as)return -1;
  66. return 1;
  67. }
  68. int betafs(int as,int bs)
  69. {
  70. int score=0,v=0,flag=0;
  71. if(as>=5)return -1;
  72. if(bs>=5)return 1;
  73. for(int i=0;i<18;i++)
  74. {
  75. score=0;
  76. if(line[i]==false)score=linecheck(i);
  77. else continue;
  78. flag=1;
  79. if(score==0)v=alphafs(as,bs);
  80. else v=betafs(as,bs+score);
  81. line[i]=false;
  82. if(v>0)return 1;
  83. }
  84. if(flag==0&&bs>as)return 1;
  85. if(flag==0&&bs<as)return -1;
  86. return -1;
  87. }
  88. int main()
  89. {
  90. int m,n,a,b,term=0,scorea=0,scoreb=0,score;
  91. scanf("%d",&m);
  92. for(int k=0;k<m;k++)
  93. {
  94. scorea=0;
  95. scoreb=0;
  96. term=0;
  97. for(int i=0;i<18;i++)line[i]=false;
  98. scanf("%d",&n);
  99. while(n--)
  100. {
  101. scanf("%d%d",&a,&b);
  102. score=transform(a,b);
  103. if(score==0)term=term^1;
  104. else
  105. {
  106. if(term==0)scorea+=score;
  107. else scoreb+=score;
  108. }
  109. }
  110. if(term==0)printf("Game %d: %c wins.\n",k+1,alphafs(scorea,scoreb)<0?'A':'B');
  111. else printf("Game %d: %c wins.\n",k+1,betafs(scorea,scoreb)<0?'A':'B');
  112. }
  113. }

K djddskkekk

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. const int maxn = 3e5 + 10;
  5. int a [ maxn ] , b [ maxn ] , sum [ maxn << 5 ] , lc [ maxn << 5 ] , rc [ maxn << 5 ] , sz , p , n , m , q , rt [ maxn ] , w;
  6. inline int read ( )
  7. {
  8. register int s = 0 , t = 1; register char ch = getchar ( );
  9. while ( ch < '0' || ch > '9' ) { if ( ch == '-' ) t = -1; ch = getchar ( ); }
  10. while ( ch >= '0' && ch <= '9' ) { s = s * 10 + ch - '0'; ch = getchar ( ); }
  11. return s * t;
  12. }
  13. void build ( int &rt , int l , int r )
  14. {
  15. rt = ++sz; sum [ rt ] = 0;
  16. if ( l == r ) return;
  17. int mid = ( l + r ) >> 1;
  18. build ( lc [ rt ] , l , mid );
  19. build ( rc [ rt ] , mid + 1 , r );
  20. }
  21. int update ( int o , int l , int r )
  22. {
  23. int oo = ++sz;
  24. lc [ oo ] = lc [ o ] , rc [ oo ] = rc [ o ] , sum [ oo ] = sum [ o ] + 1;
  25. if ( l == r ) return oo;
  26. int mid = ( l + r ) >> 1;
  27. if ( p <= mid ) lc [ oo ] = update ( lc [ o ] , l , mid );
  28. else rc [ oo ] = update ( rc [ o ] , mid + 1 , r );
  29. return oo;
  30. }
  31. int query ( int u , int v , int l , int r , int k )
  32. {
  33. int mid = ( l + r ) >> 1;
  34. if ( l == r ) return b [ l ];
  35. int ans = 0;
  36. if ( sum [ lc [ v ] ] - sum [ lc [ u ] ] > k ) ans = query ( lc [ u ] , lc [ v ] , l , mid , k );
  37. if ( ans ) return ans;
  38. if ( sum [ rc [ v ] ] - sum [ rc [ u ] ] > k ) ans = query ( rc [ u ] , rc [ v ] , mid + 1 , r , k );
  39. return ans;
  40. }
  41. int main ( void )
  42. {
  43. n = read ( ); m = read ( );
  44. for ( int i = 1 ; i <= n ; i++ ) a [ i ] = read ( ) , b [ i ] = a [ i ];
  45. sort ( b + 1 , b + 1 + n );
  46. q = unique ( b + 1 , b + 1 + n ) - b - 1;
  47. build ( rt [ 0 ] , 1 , q );
  48. for ( int i = 1 ; i <= n ; i++ ) {
  49. p = lower_bound ( b + 1 , b + 1 + q , a [ i ] ) - b;
  50. rt [ i ] = update ( rt [ i - 1 ] , 1 , q );
  51. }
  52. while ( m-- ) {
  53. int l = read ( ) , r = read ( ) , w = read ( );
  54. if ( query ( rt [ l - 1 ] , rt [ r ] , 1 , q , ( r - l + 1 ) / w ) ) {
  55. cout << query ( rt [ l - 1 ] , rt [ r ] , 1 , q , ( r - l + 1 ) / w ) << endl;
  56. } else {
  57. puts ( "-1" );
  58. }
  59. }
  60. return 0;
  61. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注