• #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 }
    View Code

    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
    ";
    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
    ";
    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
    ";
    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
    ";
    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
    ";
    63                 f1=false;
    64                 break;
    65             }
    66         }
    67         if(f1) cout<<"YES
    ";
    68     }
    69 }
    View Code

    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
    ",ans);
    71     }
    72     return 0;
    73 }
    View Code

    E待补

  • 相关阅读:
    二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
    (2)入门指南——(7)添加jquery代码(Adding our jQuery code)
    Citrix 服务器虚拟化之三十一 XenApp 6.5负载均衡
    CSS——inline-block属性
    VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
    [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序
    ElasticSearch NEST笔记
    什么是REST API?
    ArrayList与List<T>笔记
    C# Socket SSL通讯笔记
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7231915.html
Copyright © 2020-2023  润新知