#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待补

时间: 2024-10-05 21:43:11

#425[div2]的相关文章

使用windows server2012时FileZilla客户端连接时报150 Opening data channel for directory listing of &quot;/&quot; 响应:425 Can&#39;t open data connection

425 Can't open data connection 和 读取目录列表失败 问题解决 这个问题主要是由于使用Passive Mode模式造成的,解决这个问题很简单: 1.在ftp服务软件中设置指定端口地址范围,允许Passive Mode使用,比如60000-60020 2.然后在ftp服务器的系统防火墙上打开这些tcp端口,比如是60000-60020,如果使用windows自带的防火墙,就一条一条的增加,20行有点麻烦,但是可以解决. 如果ftp用户较多,可以扩大端口范围. 3.如果

cf386(div2)大一狗ACM之路

#cf386(div2)总结#前两题很顺利的做了出来, c题扔了, D题wrong了5发才A掉.A题签到题, 但是想多了, 代码写的有点长了. 找被整除最小值*7.B题 读题读了一会, 读完了就有思路了, 1A. 字符串问题, 从后往前两个两个的放到新的字符串里, 一个从最左, 一个从最右, 模拟指针扫着放, 最后特判会不会扫到一起.C题跳了没看, 最后做完了D题回来看了一眼没什么思路 日后再说.D题, 恩.. 两个多小时都用在这题上面了, 20分钟的时候做完了B之后就一直再啃D题, 暴力判断啊

Codeforces gym Hello 2015 Div1 B and Div2 D

Codeforces gym 100571 problem D Problem 给一个有向图G<V,E>和源点S,边的属性有长度L和颜色C,即E=<L,C>.进行Q次询问,每次给定一个点X,输出S到X的最短路的长度(不存在则输出 -1).但要求S到X的路径中相邻两条边颜色不一样. Limits Time Limit(ms): 1000 Memory Limit(MB): 256 |V|, |E|: [1, 10^5] X, S: [1, |V| ] L: [1, 10^9] |C|

编写css让div2在div1的右下角?

<style>#div1{ width:200px; height:200px; background-color:#F00;}#div2{ width:50px; height:50px; background:#FF0; position:relative; left:75%; top:75%; }</style></head> <body><div id="div1"> <div id="div2&quo

codeforces round #257 div2 C、D

本来应该认真做这场的,思路都是正确的. C题,是先该横切完或竖切完,无法满足刀数要求,再考虑横切+竖切(竖切+横切), 因为横切+竖切(或竖切+横切)会对切割的东西产生交叉份数,从而最小的部分不会尽可能的大. 代码如下,虽然比较长.比较乱,但完全可以压缩到几行,因为几乎是4小块重复的代码,自己也懒得压缩 注意一点,比如要判断最小块的时候,比如9行要分成2份,最小的剩下那份不是9取模2,而应该是4 m/(k+1)<=m-m/(k+1)*k          #include<bits/stdc+

codeforces Round #250 (div2)

a题,就不说了吧 b题,直接从大到小排序1-limit的所有数的lowbit,再从大到小贪心组成sum就行了 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #define N 200000 6 using namespace std; 7 int pos[N],a[N],s[N],f[N],la[N],b[N],i,j,k,ans,n,p

SRM621 (div2)

TwoWaysSorting sort.... NumbersChallenge 01dp... MixingColors loading..... SRM621 (div2),布布扣,bubuko.com

Codeforces 583 DIV2 Robot&#39;s Task 贪心

原题链接:http://codeforces.com/problemset/problem/583/B 题意: 就..要打开一个电脑,必须至少先打开其他若干电脑,每次转向有个花费,让你设计一个序列,使得总花费最小. 题解: 就傻傻的走就好..从左走到右,再走回来,更新序列和答案就好. 代码: #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #define MA

Codeforces #180 div2 C Parity Game

// Codeforces #180 div2 C Parity Game // // 这道题的题目意思就不解释了 // // 题目有那么一点难(对于我而言),不多说啦 // // 解题思路: // // 首先如果a串和b串相等,不多说直接YES // 如果b串全是0,直接YES // 注意到a串有一个性质,1的个数不会超过本身的加1. // a有个1的上限设为x,b有个1的个数设为y,则如果x < y // 那么直接NO. // // 现在一般情况下,就是模拟啦,找到a的后缀和b的前缀一样的