当前位置: 首页 > news >正文

胶州企业网站建设怎么样免费建设网站

胶州企业网站建设,怎么样免费建设网站,做服装公司需要什么网站,常州自助建站A - ABC Identity 如果只有AAA,BBB两种字符的话,我们发现要寻找p∈[1,n]p\in [1,n]p∈[1,n],使得[1:p][1:p][1:p]中AAA的数目与[p1:n][p1:n][p1:n]中BBB的数目相同。 如果有A,B,CA,B,CA,B,C三种字符,我们可以先将A,BA,BA,B分离出来&#xf…

A - ABC Identity

如果只有AAA,BBB两种字符的话,我们发现要寻找p∈[1,n]p\in [1,n]p[1,n],使得[1:p][1:p][1:p]AAA的数目与[p+1:n][p+1:n][p+1:n]BBB的数目相同。

如果有A,B,CA,B,CA,B,C三种字符,我们可以先将A,BA,BA,B分离出来,再将B,CB,CB,C分离出来,最后把A,CA,CA,C分离出来,这样最后会生成888个子序列 然后无法通过

神谕告诉我们,A,B,CA,B,CA,B,C三种字符一共只有666种本质不同的排列,因此我们可以考虑把原序列分成长度为nnn333段,从每一段中分别选取一个字符构成A,B,CA,B,CA,B,C的排列,最后把相同的排列放在一起即可。猜一下结论,这显然是有解的。

这种题还是要多尝试

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
vector<int>v[3][3];
string s;
int n,res[600005];
int has(int x,int y,int z){return x*2+(y-(x<y))*1;
}
int main(){cin>>n>>s;for(int i=0;i<3*n;i++){v[i/n][s[i]-'A'].pb(i);}for(int i=1;i<=n;i++){for(int j=0;j<3;j++){for(int k=0;k<3;k++){for(int l=0;l<3;l++){if(v[0][j].size()&&v[1][k].size()&&v[2][l].size()&&j!=k&&k!=l&&j!=l){res[v[0][j].back()]=has(j,k,l);res[v[1][k].back()]=has(j,k,l);res[v[2][l].back()]=has(j,k,l);v[0][j].pop_back();v[1][k].pop_back();v[2][l].pop_back();}}}}}for(int i=0;i<3*n;i++)cout<<res[i]+1;
}

B - ABC Supremacy

如果只考虑SSS怎么生成TTT的话,怎么做都是O(n2)O(n^2)O(n2)的。数据删除

上面那种思路可能不太好处理 但是操作是可逆的,因此判断S,TS,TS,T同构的一个充分条件是它们都能到达一个相同的状态PPP。所以我们只要求出S,TS,TS,T的最小表示即可,这样一个字符串生成的表示是唯一的,就不用担心上述问题了。

剩下的就是怎么去寻找最小串。比较烦恼就先咕了

显然我们要凑出尽量多的ABCABCABC串(这里指轮换),并且每次操作相当于将ABCABCABC串这个整体挪到前面,然后把AAA放在最前面。那么BCBCBC是固定的吗?如果BCBCBC不是固定的,这个问题也比较烦恼,可以先咕着

开始慌张 不过幸运的是之前的结论还是正确的

我们可以把最小表示的定义换成 得到最多的ABCABCABC轮换组,那么BCBCBC就肯定是固定的了。

复杂度O(n)O(n)O(n)

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
int n;
string s,t;
vector<char>solve(string s){vector<char>v;for(int i=0;i<s.size();i++){v.pb(s[i]);if(v.size()>=3&&(v[v.size()-3]=='A'&&v[v.size()-2]=='B'&&v[v.size()-1]=='C'||v[v.size()-3]=='B'&&v[v.size()-2]=='C'&&v[v.size()-1]=='A'||v[v.size()-3]=='C'&&v[v.size()-2]=='A'&&v[v.size()-1]=='B')){v.pop_back();v.pop_back();v.pop_back();}}return v;
}
int main(){cin>>n>>s>>t;cout<<(solve(s)==solve(t)?"YES":"NO");
}

C - Weird LIS

如果我们能思考清楚{Ai}\{A_i\}{Ai}合法的充要条件,那么这道题也就解决了。

或者说能建立双射然后计数也行

想不太清楚所以先咕了

思路其实并不困难,不过可能需要猜几个结论。

1.11.11.1 如果AiA_iAi全部等于KKK,猜测K≤⌊n2⌋K\le \lfloor\frac{n}{2}\rfloorK2n,这还是比较容易看出来。
1.21.21.2 如果KKKK−1K-1K1同时存在,那么Ai=K−1A_i=K-1Ai=K1的那些点是固定的,我们要在所有Ai=KA_i=KAi=K的连续段中挑选一段接在固定的数之间,那么根据1.11.11.1的推论,这一段的长度不能超过⌊l2⌋\lfloor\frac{l}{2}\rfloor2llll表示连续段长度),我们猜测对于更小的情况也是取得到的,因此∑⌊li2⌋+cntK−1≥K\sum{\lfloor\frac{l_i}{2}\rfloor}+cnt_{K-1}\ge K2li+cntK1K,并且cntK−1≤Kcnt_{K-1}\le KcntK1K

这个向下取整好像不太妙,先咕了

计数这个地方可能要多尝试

复杂度O(n2)O(n^2)O(n2)。不过要注意特判Ai=n−1A_i=n-1Ai=n1的情况。

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
const int N=5005;
int n,m,mod;
ll fac[N],inv[N],res;
ll pw(ll x,ll y=mod-2){ll z(1);for(;y;y>>=1){if(y&1)z=z*x%mod;x=x*x%mod;}return z;
}
void init(int n){fac[0]=1;for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;inv[n]=pw(fac[n]);for(int i=n;i>=1;i--)inv[i-1]=inv[i]*i%mod;
}
ll binom(int x,int y){if(x<0||y<0||x<y)return 0;return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int main(){cin>>n>>m>>mod,init(n+1);for(int x=1;x<n;x++){for(int y=0;y<=(n-x)/2;y++){int L=max(3,x),R=min(m,x+y);if(L<=R)res=(res+binom(x+y,x)*binom(x+1,n-x-2*y)%mod*(R-L+1))%mod;}}for(int i=2;i<=min(m,n/2);i++)res++;if(m==n-1)res++;cout<<res%mod;
}

D - ABC Ultimatum

先考虑怎么判断给定串合法。

好像没什么思路先咕了

不过这题还是有学习的价值的,我们可以照着结论来翻译一下

Sa(i),Sb(i),Sc(i)S_a(i),S_b(i),S_c(i)Sa(i),Sb(i),Sc(i)表示1∼i1\sim i1ia,b,ca,b,ca,b,c的个数,Ma=max⁡(Sb(i)−Sa(i)),Mb=max⁡(Sc(i)−Sb(i)),Mc=max⁡(Sa(i)−Sc(i))M_a=\max (S_b(i)-S_a(i)),M_b=\max(S_c(i)-S_b(i)),M_c=\max(S_a(i)-S_c(i))Ma=max(Sb(i)Sa(i)),Mb=max(Sc(i)Sb(i)),Mc=max(Sa(i)Sc(i)),则SSS是好的当且仅当Ma+Mb+Mc≤nM_a+M_b+M_c\le nMa+Mb+Mcn

必要性应该很显然,可以猜一个结论,或者打表证明这是充要的。

可能有时间会补一下证明

然后暴力复杂度O(n7)O(n^7)O(n7)。但是很显然可以省去一维状态,因此就可以在O(n6)O(n^6)O(n6)时间内通过了。

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
const int mod=998244353;
int n,dp[17][17][17][17][17][17],res;
string s;
void add(int &x,int y){if((x+=y)>=mod)x-=mod;
}
int main(){cin>>n>>s;dp[0][0][0][0][0][0]=1;for(int i=0;i<3*n;i++){for(int a=0;a<=n;a++){for(int b=0;b<=n;b++){int c=i-a-b;if(c>n||c<0)continue;for(int j=0;j<=n;j++){for(int k=0;k<=n;k++){for(int l=0;l<=n;l++){int tmp=dp[a][b][c][j][k][l];if(s[i]=='A'||s[i]=='?'){add(dp[a+1][b][c][j][k][max(l,a+1-c)],tmp);}if(s[i]=='B'||s[i]=='?'){add(dp[a][b+1][c][max(b+1-a,j)][k][l],tmp);}if(s[i]=='C'||s[i]=='?'){add(dp[a][b][c+1][j][max(c+1-b,k)][l],tmp);}}}}}}}for(int i=0;i<=n;i++){for(int j=0;j<=n;j++){for(int k=0;k<=n;k++){if(i+j+k<=n)add(res,dp[n][n][n][i][j][k]);}}}cout<<res;
}

E - Set Merging

场上无一人AC

这种给你规定输入的构造题就很烦,那么我们就要去分析一些性质,看它在不同情况下是否成立。

某个人曾经说过,第一个做出这种题的人一定是具有非凡的人类智慧的

http://www.yayakq.cn/news/962177/

相关文章:

  • 做网站设计师广告联盟app推广
  • 教做网站的学校免费制作网页的网站
  • 宁波网站开发服务专业的网站建设联系
  • 临沂网站优化网页设计详细步骤
  • 空白网站怎么建在家做的打字兼职的网站
  • 网页模板网站有哪些做网站需要什么备案
  • wordpress 搜索标题seo顾问培训
  • 南通网站排名团队广东新增本土确诊病例
  • 免费商城建站十堰seo优化教程
  • 上海网站建设网页制广州微网站制作
  • 电气工程专业毕业设计代做网站优秀个人网站
  • 制作微信网页的网站吗又拍网站怎么做的
  • 服装网站建设公司哪家好二维码样式大全制作
  • 音乐分享网站源码全国企业信息查询网站
  • 视频弹幕网站怎么做网站建设具体工作总结
  • 怎么做潮牌网站阿里云域名查询系统
  • 哪个商城网站建设好知乎网站怎么做推广
  • 云浮网站设计wordpress适合做商城吗
  • 电子厂家网站建设西安公司地址
  • 怎么样创建一个网站聊城做网站推广找谁
  • 大连开发区招聘网站深圳开发的购物网站
  • 网站网页区别是什么网站开发服务合同属于什么合同
  • 查信息的网站有哪些网站开发架设
  • 企业网站设计制作服务网上开店流程步骤
  • 陕西省交通集团建设网站无锡工程建设信息网站
  • 上海商地网站建设公司好一点的app开发公司
  • 365元做网站网站开发在线浏览pdf
  • 网站首页网址应该有对应的域名泰安住房和城乡建设局网站
  • 怎样用eclipse做网站主机宝怎么设置网站主页
  • php网站开发实例教程百度长治做网站多少钱