首页 > 代码库 > #425[div2]
#425[div2]
A 签到
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int main(){ 5 ll n,k; 6 cin>>n>>k; 7 ll ans=n/k; 8 if(ans%2==1){ 9 cout<<"YES";10 }11 else cout<<"NO";12 }
B 模拟题,注意细节即可。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 bool zi[26]; 5 int main(){ 6 string s,t,tt; 7 cin>>s>>t; 8 for(int i=0;i<s.size();i++){ 9 zi[s[i]-‘a‘]=true;10 }11 int n;12 cin>>n;13 for(int i=0;i<n;i++){14 cin>>tt;15 int aa=0,kk;16 bool f1=true;17 18 for(int j=0;j<t.size();j++){19 kk=j+aa;20 if(t[j]!=‘?‘&&t[j]!=‘*‘&&t[j]!=tt[kk]){21 cout<<"NO\n";22 f1=false;23 break;24 }25 26 if(t[j]==‘?‘){27 bool flag=false;28 if(zi[tt[kk]-‘a‘]) flag=true;29 if(flag) continue;30 else{31 cout<<"NO\n";32 f1=false;33 break;34 }35 }36 if(t[j]==‘*‘){37 int len=tt.size()-t.size();38 if(len<-1){39 cout<<"NO\n";40 f1=false;41 break;42 }43 if(len==-1){44 aa--;45 continue;46 }47 bool flag=false;48 for(int k=0;k<=len;k++){49 if(zi[tt[k+kk]-‘a‘]){ flag=true;break;} 50 }51 if(flag){52 cout<<"NO\n";53 f1=false;54 break;55 }56 else{57 aa+=len;58 continue;59 }60 }61 if(j==t.size()-1&&kk!=tt.size()-1){62 cout<<"NO\n";63 f1=false;64 break;65 }66 }67 if(f1) cout<<"YES\n";68 }69 }
C
D LCA模板以及距离的求法,注意用O(n)的模板会超时,据说树链剖分也可做。
1 #include<bits/stdc++.h> 2 #define maxv 100005 3 using namespace std; 4 typedef long long ll; 5 vector<int>G[maxv]; 6 int root; 7 int parent[20][maxv]; 8 int depth[maxv]; 9 int a,b,c;10 int n,q,t;11 void dfs(int v,int p,int d){12 parent[0][v]=p;13 depth[v]=d;14 for(int i=0;i<G[v].size();i++){15 if(G[v][i]!=p) dfs(G[v][i],v,d+1);16 }17 }18 19 void init(){20 dfs(0,-1,0);21 for(int k=0;k+1<20;k++){22 for(int v=0;v<n;v++){23 if(parent[k][v]<0) parent[k+1][v]=-1;24 else parent[k+1][v]=parent[k][parent[k][v]];25 }26 }27 }28 29 int lca(int u,int v){30 if(depth[u]>depth[v]) swap(u,v);31 for(int k=0;k<20;k++){32 if((depth[u]-depth[v])>>k&1){33 v=parent[k][v];34 }35 }36 if(u==v) return u;37 for(int k=20-1;k>=0;k--){38 if(parent[k][u]!=parent[k][v]){39 u=parent[k][u];40 v=parent[k][v];41 }42 }43 return parent[0][u];44 }45 int dis(int a,int b,int u){46 return depth[a]+depth[b]-2*depth[u];47 } 48 int main(){49 cin>>n>>q;50 for(int i=0;i<n-1;i++){51 cin>>t;52 G[i+1].push_back(t-1);53 G[t-1].push_back(i+1);54 }55 init();56 for(int j=0;j<q;j++){57 cin>>a>>b>>c;58 a-=1;59 b-=1;60 c-=1;61 int v1,v2,v3;62 v1=lca(a,b);63 v2=lca(b,c);64 v3=lca(c,a);65 int ab,bc,ac;66 ab=dis(a,b,v1);67 bc=dis(b,c,v2);68 ac=dis(a,c,v3);69 int ans=max(max(ab+bc-ac,bc+ac-ab),ac+ab-bc)/2+1;70 printf("%d\n",ans);71 }72 return 0;73 }
E待补
#425[div2]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。