test 7 3-22 2021省选模拟赛seven

文章目录

  • 考试复盘
  • 人生
  • 赢家
  • 黑红兔

考试复盘

T1T1T1

subtask1:n≤5subtask1:n\le 5subtask1:n5,暴搜点的颜色状态以及边的存在状态

对于一条连接相同颜色点的边,可要可不要,不会提供形态变化的贡献,2edge2^{edge}2edge

dpdpdp???

dp[i][j][0/1]dp[i][j][0/1]dp[i][j][0/1]表示前iii个点,颜色为白/黑,由前面jjj个点转移过来?

好像转移不动。。pass

T2T2T2

n≤15n\le 15n15??感觉给子任务编号,是不同数据下的算法拼凑而来的呢(〃 ̄︶ ̄)人( ̄︶ ̄〃)

subtask1:m≤20subtask1:m\le 20subtask1:m20,直接2m2^m2m暴搜

竟然空间超限,ε=(・д・`*)ハァ…,哭晕在厕所

subtask2:1−2subtask2:1-2subtask2:12之间有唯一的一条简单路径

考虑枚举在这条路径上的iii点相遇,则除了这条路径以外的边的方向都无所谓

subtask3:n≤10→m≤45subtask3:n\le 10\rightarrow m\le 45subtask3:n10m45

subtask4:subtask4:subtask4:一般情况

考虑枚举在点xxx相遇,暴搜1−x1-x1x每一条路径,在此基础上搜2−x2-x2x的每一条路径,没被打标记的边可选可不选;

但是这里会出现重复的情况,因为路径并不是唯一的

emmmmmm(▼㉨▼メ)难搞哦(・。・)

T3T3T3

字符匹配非常类似最近做的FFTFFTFFT题_(:3J∠)

可仔细想想,又不太对劲,pass

猜个小结论:长度是每段只比上一段加一,感觉就是对的

考虑dp[i][j]dp[i][j]dp[i][j],表示串[l,r][l,r][l,r]作为首串,最多能接的段数

转移,要枚举位置??比较串,kmpkmpkmp??hashhashhash??,好像时间复杂度有点大诶

算了吧。。。

考后

唯一想说的,对于这场比赛就只有空间超限了,(*゚Д゚)つミ匚___

人生

在这里插入图片描述n≤2e5n\le 2e5n2e5


endiend_iendi表示以iii为结尾的路径条数

如果endjend_jendj是偶数条,连向iii后,endiend_iendi也只会加上偶数,奇偶性不变

如果endjend_jendj是奇数条,连向iii后,endiend_iendi会加上奇数,奇偶性变化

注意endiend_iendi要加上111,自己到自己的路径

由此得知,endiend_iendi奇偶性只跟前面与iii连边的点中endjend_jendj是奇数的点的个数有关,与实际点是哪个无关

f[i][j][k][h]f[i][j][k][h]f[i][j][k][h]:表示前iii个点,有jjj个白点和kkk个黑点的endendend是奇数,且前iii个点endendend之和的奇偶性为hhh000111奇)

对于一个nnn元集合(n>1n>1n>1),选出一个偶数子集大小或者是一个奇数子集大小的方案数均为2n−12^{n-1}2n1


简单证明一下( ̄▽ ̄)":

nnn为奇数

假设选了iii个,iii为奇数,那么n−in-ini个没有选,n−in-ini为偶数

说明每选一种奇数子集大小的方案,就会存在一种偶数子集大小的方案

各自占一半,=2n2=2n−1=\frac{2^n}{2}=2^{n-1}=22n=2n1

nnn为偶数

T(n,1)T(n,1)T(n,1)表示在nnn个中选奇数个的方案数,T(n,0)T(n,0)T(n,0)表示在nnn个中选偶数个的方案数

考虑把nnn分成前后各一半

Ⅰ设n/2n/2n/2为奇数

T(n,1)=T(n/2,1)∗T(n/2,0)+T(n/2,0)∗T(n/2,1)=2∗T(n/2,0)∗T(n/2,1)T(n,1)=T(n/2,1)*T(n/2,0)+T(n/2,0)*T(n/2,1)=2*T(n/2,0)*T(n/2,1)T(n,1)=T(n/2,1)T(n/2,0)+T(n/2,0)T(n/2,1)=2T(n/2,0)T(n/2,1)

T(n,0)=T(n/2,1)∗T(n/2,1)+T(n/2,0)∗T(n/2,0)T(n,0)=T(n/2,1)*T(n/2,1)+T(n/2,0)*T(n/2,0)T(n,0)=T(n/2,1)T(n/2,1)+T(n/2,0)T(n/2,0)

先前证明过当xxx为奇数时,其选择奇数和偶数的方案数相等

T(n,0)=T(n/2,1)∗T(n/2,0)+T(n/2,0)∗T(n/2,1)=2∗T(n/2,0)∗T(n/2,1)T(n,0)=T(n/2,1)*T(n/2,0)+T(n/2,0)*T(n/2,1)=2*T(n/2,0)*T(n/2,1)T(n,0)=T(n/2,1)T(n/2,0)+T(n/2,0)T(n/2,1)=2T(n/2,0)T(n/2,1)

⇒T(n,0)=T(n,1)\Rightarrow T(n,0)=T(n,1)T(n,0)=T(n,1)

Ⅱ设n/2n/2n/2为偶数

递归n/2n/2n/2,不停的除以222,总有一层是奇数,就变成了Ⅰ

证毕


大力讨论列出转移方程

①点i+1i+1i+1为白色,且endendend为偶数,总和奇偶性不变
f[i+1][j][k][h]=f[i][j][k][h]∗2k−1∗2i−kf[i+1][j][k][h]=f[i][j][k][h]*2^{k-1}*2^{i-k}f[i+1][j][k][h]=f[i][j][k][h]2k12ik

2k−12^{k-1}2k1:会对i+1i+1i+1奇偶性造成影响的kkk个黑色奇数点,从中选择奇数个的方案数,endi+1end_{i+1}endi+1有这些黑色奇数点带来的奇数贡献,再加上自己到自己本身一条路径,就是偶数了

2i−k2^{i-k}2ik:剩下的点与i+1i+1i+1可连可不连,不会造成影响

②点i+1i+1i+1为白色,且endendend为奇数,总和奇偶改变
f[i+1][j+1][k][h⨁1]=f[i][j][k][h]∗2k−1∗2i−kf[i+1][j+1][k][h\bigoplus1]=f[i][j][k][h]*2^{k-1}*2^{i-k}f[i+1][j+1][k][h1]=f[i][j][k][h]2k12ik

2k−12^{k-1}2k1:会对i+1i+1i+1奇偶性造成影响的kkk个黑色奇数点,从中选择偶数个的方案数

③点i+1i+1i+1为黑色,且endendend为偶数,总和奇偶性不变
f[i+1][j][k][h]=h[i][j][k][h]∗2j−1∗2i−jf[i+1][j][k][h]=h[i][j][k][h]*2^{j-1}*2^{i-j}f[i+1][j][k][h]=h[i][j][k][h]2j12ij

2j−12^{j-1}2j1:会对i+1i+1i+1奇偶性造成影响的jjj个白色奇数点,从中选择奇数个的方案数

④点i+1i+1i+1为黑色,且endendend为奇数,总和奇偶改变
f[i+1][j][k+1][h⨁1]=f[i][j][k][h]∗2j−1∗2i−jf[i+1][j][k+1][h\bigoplus 1]=f[i][j][k][h]*2^{j-1}*2^{i-j}f[i+1][j][k+1][h1]=f[i][j][k][h]2j12ij

2j−12^{j-1}2j1:会对i+1i+1i+1奇偶性造成影响的jjj个白色奇数点,从中选择偶数个的方案数

如果点i+1i+1i+1被钦定为黑色,则没有①②的转移;白色则没有③④的转移

观察到每个转移方程中后面两个222的幂乘积与j,kj,kj,k无关,都为2i−12^{i-1}2i1
j,kj,kj,k000时,从中选偶数个为2i2^i2i,选奇数个为000

于是,不再需要j,kj,kj,k的实际值了

f[i][0/1][0/1][h]f[i][0/1][0/1][h]f[i][0/1][0/1][h],表示前iii个点,endendend和的奇偶为hhh,是否有endendend为奇数的白/黑点

#include <cstdio>
#define int long long
#define mod 998244353
#define maxn 200005
int f[maxn][2][2][2];
int mi[maxn], c[maxn];
int n;signed main() {scanf( "%lld", &n );for( int i = 1;i <= n;i ++ ) scanf( "%lld", &c[i] );mi[0] = 1;for( int i = 1;i <= n;i ++ ) mi[i] = ( mi[i - 1] << 1 ) % mod;f[0][0][0][0] = 1;for( int i = 0;i < n;i ++ )for( int j = 0;j <= 1;j ++ )for( int k = 0;k <= 1;k ++ )for( int h = 0;h <= 1;h ++ ) {if( ! f[i][j][k][h] ) continue;if( c[i + 1] != 1 ) {f[i + 1][j][k][h] = ( f[i + 1][j][k][h] + f[i][j][k][h] * ( k ? mi[i - 1] : 0 ) % mod ) % mod;f[i + 1][j | 1][k][h ^ 1] = ( f[i + 1][j | 1][k][h ^ 1] + f[i][j][k][h] * ( k ? mi[i - 1] : mi[i] ) % mod ) % mod;}if( c[i + 1] != 0 ) {f[i + 1][j][k][h] = ( f[i + 1][j][k][h] + f[i][j][k][h] * ( j ? mi[i - 1] : 0 ) % mod ) % mod;f[i + 1][j][k | 1][h ^ 1] = ( f[i + 1][j][k | 1][h ^ 1] + f[i][j][k][h] * ( j ? mi[i - 1] : mi[i] ) % mod ) % mod;}}int ans = 0;for( int j = 0;j <= 1;j ++ )for( int k = 0;k <= 1;k ++ )ans = ( ans + f[n][j][k][1] ) % mod;printf( "%lld\n", ans );return 0;
}

赢家

在这里插入图片描述n≤15,m≤n×(n+1)2n\le 15,m\le \frac{n\times (n+1)}{2}n15,m2n×(n+1)


转化为用总数2m2^m2m减去不合法的方案数

不合法方案数即为,111能到达的点集SSS222能到达的点集为TTTS∩T=∅S∩T=\emptysetST=

f[S]f[S]f[S]表示能使111到达点集为SSS内所有点的方案数,g[T]g[T]g[T]为能使222到达点集为TTT内所有点的方案数

枚举S,TS,TS,T,两个集合内部的边的定向方案数即为f[S]×g[T]f[S]\times g[T]f[S]×g[T](不能有边跨越S,TS,TS,T

对于点集S∪TS∪TST的补集中的点,内部边可以随便定向2edge2^{edge}2edge,而对于一个顶点在集合外另一个顶点在S,TS,TS,T集合内的边,一定是从集合外指向集合内

枚举的时间复杂度为O(3n)O(3^n)O(3n)

接下来考虑怎么计算f[S]f[S]f[S]g[T]g[T]g[T]与之一样

一样的思路,用总数减去不合法的数量

总数为2edge_S2^{edge\_S}2edge_S

减去不合法的方案,枚举一个SSS的真子集s′s's,计算只能到达子集s′s's内的点的方案数

点集s’s’s内的方案数为f[s′]f[s']f[s],点集外的方案数为2edge_S−edge_s’2^{edge\_S-edge\_s’}2edge_Sedge_s

对于横跨s’,CSs′s’,C_{S}s's,CSs的边,方向一定是从外面指向子集s′s's

所以此时减去的方案数为f[s′]×2edge_S−edge_s′f[s']\times 2^{edge\_S-edge\_s'}f[s]×2edge_Sedge_s

枚举子集,DPDPDP时间复杂度为O(3n)O(3^n)O(3n)

#include <cstdio>
#define mod 1000000007
#define int long long
#define maxn 20
#define maxm 1 << 15
int n, m, id;
bool edge[maxn][maxn];
int in[maxm], out[maxm], mi[maxn * maxn], f[maxm], g[maxm];signed main() {scanf( "%lld %lld %lld", &n, &m, &id );mi[0] = 1;for( int i = 1, u, v;i <= m;i ++ ) {scanf( "%lld %lld", &u, &v );edge[u][v] = 1;mi[i] = ( mi[i - 1] << 1 ) % mod;}int cnt = 1 << n;for( int S = 0;S < cnt;S ++ )for( int i = 1;i <= n;i ++ )for( int j = 1;j <= n;j ++ )if( edge[i][j] ) {if( ( 1 << i - 1 & S ) && ( 1 << j - 1 & S ) ) in[S] ++;//完全包含在点集S里面的边if( ( 1 << i - 1 & S ) || ( 1 << j - 1 & S ) ) out[S] ++;//完全包含在点集S里面的边+一个顶点在点集里一个顶点在点集外}for( int S = 0;S < cnt;S ++ ) {if( ! ( S & 1 ) ) continue;//如果没有包含点1 跳过f[S] = mi[in[S]];for( int T = ( S - 1 ) & S;T;T = ( T - 1 ) & S ) {if( ! ( T & 1 ) ) continue;//子集也必须包含点1f[S] = ( f[S] - f[T] * mi[in[S ^ T]] % mod + mod ) % mod;}}for( int S = 0;S < cnt;S ++ ) {if( ! ( S >> 1 & 1 ) ) continue;g[S] = mi[in[S]];for( int T = ( S - 1 ) & S;T;T = ( T - 1 ) & S ) {if( ! ( T >> 1 & 1 ) ) continue;g[S] = ( g[S] - g[T] * mi[in[S ^ T]] % mod + mod ) % mod;}}int ans = mi[m];for( int S = 0;S < cnt;S ++ ) { if( ! ( S & 1 ) || ( S >> 1 & 1 ) ) continue;for( int T = ( cnt - 1 ) ^ S;T;T = ( T - 1 ) & ( ( cnt - 1 ) ^ S ) ) {if( ! ( T >> 1 & 1 ) || in[S] + in[T] < in[S | T] ) continue;//如果没有包含点2 或 S,T点集有边横跨两个集合 为不合法划分 跳过ans = ( ans - f[S] * g[T] % mod * mi[m - out[S | T]] % mod + mod ) % mod;}}printf( "%lld\n", ans );return 0;
}

黑红兔

在这里插入图片描述n≤5e5n\le 5e5n5e5


性质1:存在一种方案,最后一段长度为111,每选出的段的长度都比上一段小111

很显然,如果某一段比下一段长≥2\ge 22,可以在前面或者后面去掉若干字符,只需要保证下一段是严格子串即可

f[i][j]f[i][j]f[i][j]表示以子串[i,j][i,j][i,j]为首串,能否找出j−i+1j-i+1ji+1段符合要求

fffyes/noyes/noyes/noboolboolbool数组

枚举下一段与f[i+1,j]f[i+1,j]f[i+1,j]还是f[i][j−1]f[i][j-1]f[i][j1]进行转移

hashhashhash判断两个串是否相同

性质2:答案不超过O(n)O(\sqrt{n})O(n)

最好的情况为1+2+...+k1+2+...+k1+2+...+k,此时有k(k+1)2≤n\frac{k(k+1)}{2}\le n2k(k+1)n

性质3:假设以iii作为第一段开头,如果第一个串长lenlenlen时,可以选出lenlenlen段,那么串长为len−1len-1len1时,也能选出len−1len-1len1

非常显然,都删去一个首/尾跟下一段无关的字符,最后一段被删去,仍能保证严格子串性质

f[i]f[i]f[i]为以iii开始的首串,最长能选多少段

考虑二分答案,问题转化为找[i+mid,n][i+mid,n][i+mid,n]内是否存在一个jjj,满足

f[j]≥mid−1f[j]\ge mid-1f[j]mid1

lcp(i,j)≥mid−1lcp(i,j)\ge mid-1lcp(i,j)mid1或者lcp(i+1,j)≥mid−1lcp(i+1,j)\ge mid-1lcp(i+1,j)mid1(看是首/尾是新添的多余字符

如果求出原串的后缀数组,那么lcp(i,j)≥xlcp(i,j)\ge xlcp(i,j)x相当于rnkjrnk_jrnkj在某个区间内,可以二分求出这个区间

此套路做法,详情可见👉亲爱的佳媛姐姐正解做法——字符串LOJ2059

O(nlog2n)O(nlog^2n)O(nlog2n)

性质4:f[i]≤f[i+1]+1f[i]\le f[i+1]+1f[i]f[i+1]+1

如果iii开始能接大于f[i+1]+1f[i+1]+1f[i+1]+1段,那么i+1i+1i+1开始一定能接大于f[i+1]+1−1=f[i+1]f[i+1]+1-1=f[i+1]f[i+1]+11=f[i+1]段,有性质3得出

所以就不用二分了,类似滑动窗口一样,先把f[i]f[i]f[i]赋为f[i+1]+1f[i+1]+1f[i+1]+1,然后判断是否可行,不行就一直−1-11直到可行为止

类似于SASASAheightheightheight数组,O(nlogn)O(nlogn)O(nlogn)

预处理ststst表里面的logloglog,快了整整三秒,卡(>ρ<")了

终于过了(^U^)ノ~YO

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define maxn 500005
#define INF 0x7f7f7f7f
int n, m = 255;
char s[maxn];
int tot[maxn], rnk[maxn << 1], sa[maxn], id[maxn], x[maxn], h[maxn], lg[maxn];
int st[maxn][20];void init() {for( int i = 1;i <= n;i ++ ) tot[x[i] = s[i]] ++;for( int i = 1;i <= m;i ++ ) tot[i] += tot[i - 1];for( int i = n;i;i -- ) sa[tot[x[i]] --] = i;for( int k = 1;k <= n;k <<= 1 ) {int num = 0;for( int i = n - k + 1;i <= n;i ++ ) id[++ num] = i;for( int i = 1;i <= n;i ++ ) if( k < sa[i] ) id[++ num] = sa[i] - k;memset( tot, 0, sizeof( tot ) );for( int i = 1;i <= n;i ++ ) tot[x[i]] ++;for( int i = 1;i <= m;i ++ ) tot[i] += tot[i - 1];for( int i = n;i;i -- ) sa[tot[x[id[i]]] --] = id[i];for( int i = 1;i <= n;i ++ ) rnk[i] = x[i];x[sa[1]] = num = 1;for( int i = 2;i <= n;i ++ )x[sa[i]] = ( rnk[sa[i]] == rnk[sa[i - 1]] && rnk[sa[i] + k] == rnk[sa[i - 1] + k] ) ? num : ++ num;if( n == num ) break;m = num;}for( int i = 1;i <= n;i ++ ) rnk[sa[i]] = i;int k = 0;for( int i = 1;i <= n;i ++ ) {if( rnk[i] == 1 ) continue;if( k ) k --;int j = sa[rnk[i] - 1];while( i + k <= n && j + k <= n && s[i + k] == s[j + k] ) k ++;h[rnk[i]] = k;}lg[0] = -1;for( int i = 1;i <= n;i ++ ) lg[i] = lg[i >> 1] + 1;for( int i = 1;i <= n;i ++ ) st[i][0] = h[i];for( int j = 1;j <= 18;j ++ )for( int i = 1;i <= n;i ++ )if( i + ( 1 << j - 1 ) > n ) break;else st[i][j] = min( st[i][j - 1], st[i + ( 1 << j - 1 )][j - 1] );
}int lcp( int l, int r ) {int i = lg[r - l + 1];return min( st[l][i], st[r - ( 1 << i ) + 1][i] );
}int cnt;
int rt[maxn], t[maxn * 30], lson[maxn * 30], rson[maxn * 30];void modify( int pre, int &now, int l, int r, int pos, int val ) {if( ! now ) now = ++ cnt;if( l == r ) { t[now] = max( t[now], val ); return; }int mid = ( l + r ) >> 1;if( pos <= mid ) rson[now] = rson[pre], modify( lson[pre], lson[now], l, mid, pos, val );else lson[now] = lson[pre], modify( rson[pre], rson[now], mid + 1, r, pos, val );t[now] = max( t[lson[now]], t[rson[now]] );
}int query( int now, int l, int r, int L, int R ) {if( ! now || R < l || r < L ) return 0;if( L <= l && r <= R ) return t[now];int mid = ( l + r ) >> 1;return max( query( lson[now], l, mid, L, R ), query( rson[now], mid + 1, r, L, R ) );
}int find_l( int pos, int len ) {int l = 1, r = pos - 1;while( l <= r ) {int mid = ( l + r ) >> 1;if( lcp( mid + 1, pos ) >= len ) r = mid - 1;else l = mid + 1;}return l;
}int find_r( int pos, int len ) {int l = pos + 1, r = n;while( l <= r ) {int mid = ( l + r ) >> 1;if( lcp( pos + 1, mid ) >= len ) l = mid + 1;else r = mid - 1;}return r;
}bool check( int pos, int len ) {if( query( rt[pos + len], 1, n, find_l( rnk[pos], len - 1 ), find_r( rnk[pos], len - 1 ) ) >= len - 1 )return 1;if( query( rt[pos + len], 1, n, find_l( rnk[pos + 1], len - 1 ), find_r( rnk[pos + 1], len - 1 ) ) >= len - 1 )return 1;return 0;
}int ans;
int f[maxn];int main() {scanf( "%s", s + 1 );n = strlen( s + 1 );	init();ans = f[n] = 1;modify( rt[n + 1], rt[n], 1, n, rnk[n], f[n] );for( int i = n - 1;i;i -- ) {f[i] = f[i + 1] + 1;while( ! check( i, f[i] ) ) f[i] --;ans = max( ans, f[i] );modify( rt[i + 1], rt[i], 1, n, rnk[i], f[i] );}printf( "%d\n", ans );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shadow Properties之美(一)【Microsoft Entity Framework Core随笔】

最近在做公司的项目的时候&#xff0c;开始把部分程序迁移到EF Core&#xff0c;然后有了一些感触&#xff0c;趁着还没忘却&#xff0c;还是先记录下来。EF Core还在成长中&#xff0c;我写这个的时候&#xff0c;版本是2.2。如果对着已有的EF 5/6来说&#xff0c;还有很多功能…

CF1413C Perform Easily(two pointers)

解析 巧夺天工 可以说是把two pointers玩明白了 把所有的可能减出来的结果升序排列一下 然后一个选取区间合法当且仅当这个区间含有1-n所有数的至少一个可能的差 然后就可以two pointers了 #include<bits/stdc.h> const int N2e5100; const int mod1e97; #define ll lon…

CF1039E-Summer Oenothera Exhibition【LCT,根号分治】

正题 题目链接:https://www.luogu.com.cn/problem/CF1039E 题目大意 给出nnn个数的序列&#xff0c;mmm次询问至少将这个序列分成多少段才能满足每一段的和不超过w−qiw-q_iw−qi​。 1≤n,m≤105,1≤w,ai≤1091\leq n,m\leq 10^5,1\leq w,a_i\leq 10^91≤n,m≤105,1≤w,ai​…

E - Another Postman Problem FZU - 2038

E - Another Postman Problem FZU - 2038 题意&#xff1a; n个点通过n-1个边两两相连&#xff0c;每个边有权值&#xff0c;求对于每个点到其他点的距离和的总和 题解&#xff1a; 我们以下图中的1-2这条边为例子&#xff0c;1-2这条边一共计算了几次&#xff1f; 我们现在…

CF1034E Little C Loves 3 III(神仙构造+FWT_OR卷积)

title 题目 solution 先说很神仙的结论构造&#xff1a;对于aia_iai​&#xff0c;aivi∗4pop_count(i)a_iv_i*4^{pop\_count(i)}ai​vi​∗4pop_count(i)&#xff0c;bbb同理 ci∑j∣kiai∗bjc_i\sum_{j|ki}a_i*b_jci​∑j∣ki​ai​∗bj​&#xff0c;则ansi≡ci4pop_coun…

ASP.NET Core 3.0 项目开始“瘦身”

新的 ASP.NET Core 项目使用名为Microsoft.AspNetCore.App的综合包。该包也可以称为“ASP.NET Core 共享框架”&#xff0c;其背后的基本思想是&#xff0c;包括一个典型的应用程序所需要的所有东西。但是&#xff0c;如果看看该包的依赖项&#xff0c;对“需要”的定义看起来相…

CF1415D:XOR-gun(异或)

这就是CF 解析 这题真的是… …很妙 qwq 考虑到&#xff0c;如果相邻的连续三个二进制最高位相同&#xff0c;那么把后两个异或一下就可以打成目标 而如果不存在连续打三个二进制最高位相同的数&#xff0c;由于ai≤109a_i\leq10^9ai​≤109&#xff0c;所以n必然不超过60 前…

CF1369F-BareLee【博弈论,SG函数】

正题 题目链接:https://www.luogu.com.cn/problem/CF1369F 题目大意 TTT次游戏&#xff0c;每次给出一个sss和ttt&#xff0c;两个人轮流操作&#xff0c;可以让ss1ss1ss1或者ss2ss\times 2ss2&#xff0c;如果s>ts>ts>t的话那个人就输了。 每次输的人将作为下一次的…

D - Maximum Value Problem FZU - 2037

D - Maximum Value Problem FZU - 2037 题意&#xff1b; 这个序列[1&#xff0c;3&#xff0c;2&#xff0c;4]&#xff0c;maxx0.如果将maxx赋值为最大值需要3次&#xff0c;第一次为maxx1&#xff0c;第二次maxx3&#xff0c;第三次maxx4 给你一个n&#xff0c;求n全排列的…

一个.NET Core开发者的Linux入门学习笔记

用.NET Core开发也有一段时间了&#xff0c;但是由于工作原因一直都是在Windows系统上进行的开发&#xff0c;一直想学习Linux然后把.NET Core开发的程序跑在Linux上&#xff0c;然后把心得体会记录一下发布再博客园&#xff0c;奈何拖延症泛滥&#xff0c;所以只写过一篇《Cen…

CF914G Sum the Fibonacci(FWT模板+子集卷积)

title 题目 solution (sa∣sb)&sc&(sd⊕se)2i,i∈Z;sa&sb0(s_a|s_b)\&s_c\&(s_d⊕s_e)2^i,i∈Z;s_a\&s_b0(sa​∣sb​)&sc​&(sd​⊕se​)2i,i∈Z;sa​&sb​0 令isa∣sb,jsc,dsd⊕seis_a|s_b,js_c,ds_d⊕s_eisa​∣sb​,jsc​,dsd​⊕se…

CF1415E New Game Plus(贪心)

解析 把题目标签写在数据范围上的一道题 由于k过大&#xff0c;显然无法dp 那就只能贪了 一开始被完全带跑偏了… 想的是把序列降序排列然后从后往前划分… 这个思路能很简单的写出nkdp 然后就卡住了… 算看了一半题解吧 看到第一段“考虑分成k组”后退出来了 有了这个线头后…

loj#6518-「雅礼集训 2018 Day11」序列【整体二分,dp,线段树】

正题 题目链接:https://loj.ac/p/6518 题目大意 一个长度为nnn的序列aaa&#xff0c;你可以花费111的代价让一个数111或者−1-1−1&#xff0c;给出mmm个限制形如第kkk个数要是区间[l,r][l,r][l,r]的最大/最小值。 求满足所有限制的最小代价 1≤n≤5000,1≤ai≤1051\leq n\l…

一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)

文章目录一&#xff1a;CF1463F二&#xff1a;CF1152F2三&#xff1a;CF1342F一&#xff1a;CF1463F Max Correct Set 有一个结论&#xff1a;以xyxyxy为周期排列填充一定是不劣于最后的答案的 令pxy,rn%ppxy,rn\%ppxy,rn%p ⌊np⌋\lfloor\frac{n}{p}\rfloor⌊pn​⌋出现次数为…

C - Log Calculator FZU - 2036

C - Log Calculator FZU - 2036 题意&#xff1a; 已知a和b&#xff0c;满足alog2x&#xff0c;blog2y 求log2(xy) 题解&#xff1a; 因为alog2x&#xff0c;blog2y 所以x2a, yab log2(xy)log2(2a2b)log2(2b(12a-b))blog2(2a-b1) x>32时&#xff0c;blog2(2x1)xb 代码&…

实用帖 | 使用Visual Studio开发.NET Core推荐设置

Visual Studio 一直是.NET程序员的好伙伴&#xff0c;如今虽然.NET Core的开发可以用VSCode等其他环境&#xff0c;但VS依旧有强大的优势。今天来介绍下如何让VS用得更顺手的技能Here We Go!⛷基本配置首先要搞清楚的一点是&#xff0c;并不是所有版本的Visual Studio都支持.NE…

CF1654F-Minimal String Xoration【倍增】

正题 题目链接:https://www.luogu.com.cn/problem/CF1654F 题目大意 给出一个长度为2n2^n2n的字符串sss&#xff08;下标为0∼2n−10\sim 2^n-10∼2n−1&#xff09; 你要找到一个xxx满足tisixorxt_{i}s_{i\ xor\ x}ti​si xor x​&#xff0c;并且ttt的字典序最小。 1≤n≤…

P3642 [APIO2016]烟火表演(左偏树、函数)

解析 感觉是左偏树的神题了. 首先有一个比较显然的结论&#xff0c;一个合法的方案中&#xff0c;两个叶子到它们 lca\text{lca}lca 的距离必须相等. 考虑设计 dp\text{dp}dp &#xff1a; fi,xf_{i,x}fi,x​ 表示 iii 的子树中&#xff0c;所有叶子到它的距离为 xxx 的最小…

2011年全国大学生程序设计邀请赛(福州)

题号题目考点难度APassword table模拟签到BAxial symmetry计算几何代码题CLog Calculatorjava大数DMaximum Value Problem思维题EAnother Postman Problem思维题FPets二分图匹配模板题GTilingHChecker思维题角度很妙&#xff0c;值得多练练IThe Mad MathematicianJSocial Netwo…

概率与期望游戏地图

文章目录前言拾得宝典的玄灵大陆P2911P4316P6154P1297P6862参悟升级的三千界P1365P1850[CF]Crypto Lights打野刷野怪副本[AT-abc215G]Colorful Candies 2前言 其实从去年开始初次接触概率期望后&#xff0c;后面的考试几乎场场见到&#xff1b;而每次都只能敲最原始的暴力&…