zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2)

    https://codeforces.com/contest/911

    A

    模拟

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define lson l,mid,rt<<1
     4 #define rson mid+1,r,rt<<1|1
     5 #define IT set<ll>::iterator
     6 #define sqr(x) ((x)*(x))
     7 #define pb push_back
     8 #define eb emplace_back
     9 #define maxn 5000005
    10 #define eps 1e-8
    11 #define pi acos(-1.0)
    12 #define rep(k,i,j) for(int k=i;k<j;k++)
    13 typedef long long ll;
    14 typedef pair<int,int> pii;
    15 typedef pair<ll,ll>pll;
    16 typedef pair<ll,int> pli;
    17 typedef pair<pair<int,string>,pii> ppp;
    18 typedef unsigned long long ull;
    19 const long long MOD=998244353;
    20 const double oula=0.57721566490153286060651209;
    21 using namespace std;
    22 
    23 int a[100005];
    24 
    25 
    26 int main(){
    27     std::ios::sync_with_stdio(false);
    28     int n;
    29     cin>>n;
    30     int x=0x3f3f3f3f;
    31     for(int i=1;i<=n;i++){
    32         cin>>a[i];
    33         x=min(x,a[i]);
    34     }
    35     int Min=0x3f3f3f3f;
    36     int pre=-1;
    37     for(int i=1;i<=n;i++){
    38         if(a[i]==x){
    39             if(pre==-1) pre=i;
    40             else Min=min(Min,i-pre),pre=i;
    41         }
    42     }
    43     cout<<Min<<endl;
    44 }
    View Code

    B

    二分

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define lson l,mid,rt<<1
     4 #define rson mid+1,r,rt<<1|1
     5 #define IT set<ll>::iterator
     6 #define sqr(x) ((x)*(x))
     7 #define pb push_back
     8 #define eb emplace_back
     9 #define maxn 5000005
    10 #define eps 1e-8
    11 #define pi acos(-1.0)
    12 #define rep(k,i,j) for(int k=i;k<j;k++)
    13 typedef long long ll;
    14 typedef pair<int,int> pii;
    15 typedef pair<ll,ll>pll;
    16 typedef pair<ll,int> pli;
    17 typedef pair<pair<int,string>,pii> ppp;
    18 typedef unsigned long long ull;
    19 const long long MOD=998244353;
    20 const double oula=0.57721566490153286060651209;
    21 using namespace std;
    22 
    23 int n,a,b;
    24 
    25 bool Check(int mid){
    26     int sum=a/mid;
    27     sum+=b/mid;
    28     if(sum>=n) return true;
    29     return false;
    30 }
    31 
    32 int main(){
    33     std::ios::sync_with_stdio(false);
    34     cin>>n>>a>>b;
    35     int L=0,R=min(a,b),mid;
    36     while(L<=R){
    37         mid=L+R>>1;
    38         if(Check(mid)){
    39             L=mid+1;
    40         }
    41         else{
    42             R=mid-1;
    43         }
    44     }
    45     cout<<R<<endl;
    46 }
    View Code

    C

    题意:有三个灯,A将开启这些灯。 这些灯一会亮一会不亮。如果第i个灯在第x秒开启,那么它仅在第x,x+ki,x+2*ki……秒时是亮的。 A想要打开灯,使每秒至少有一个灯是亮的。 A想要选择三个整数a,b,c,在第a秒接通第一个灯,在第b秒接通第二个灯,在第c秒接通第三灯, 并且在从max(a,b,c)开始的每秒中,至少有一个灯将是亮的。 问A是否可以做到。

    思路:直接模拟就可以。。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define lson l,mid,rt<<1
     4 #define rson mid+1,r,rt<<1|1
     5 #define IT set<ll>::iterator
     6 #define sqr(x) ((x)*(x))
     7 #define pb push_back
     8 #define eb emplace_back
     9 #define maxn 5000005
    10 #define eps 1e-8
    11 #define pi acos(-1.0)
    12 #define rep(k,i,j) for(int k=i;k<j;k++)
    13 typedef long long ll;
    14 typedef pair<int,int> pii;
    15 typedef pair<ll,ll>pll;
    16 typedef pair<ll,int> pli;
    17 typedef pair<pair<int,string>,pii> ppp;
    18 typedef unsigned long long ull;
    19 const long long MOD=998244353;
    20 const double oula=0.57721566490153286060651209;
    21 using namespace std;
    22 
    23 int book[1505];
    24 
    25 int main(){
    26     std::ios::sync_with_stdio(false);
    27     int a,b,c;
    28     cin>>a>>b>>c;
    29     book[a]++;
    30     book[b]++;
    31     book[c]++;
    32     if(book[1]) cout<<"YES"<<endl;
    33     else if(book[2]>=2) cout<<"YES"<<endl;
    34     else if(book[3]>=3) cout<<"YES"<<endl;
    35     else if(book[2]&&book[4]>=2) cout<<"YES"<<endl;
    36     else cout<<"NO"<<endl;
    37 }
    View Code

    D

    题意:给你一个长度为n的序列,有m次操作。每次翻转[l,r]的区间,每次操作后询问序列逆序对个数的奇偶性。

    思路:通过多次模拟可以发现一个规律:

    1、区间翻转时,区间内的逆序对的个数不影响区间外的逆序对的个数

    2、区间翻转,正序对和逆序对数量交换。所以可以判断区间序对数的奇偶性

    发现这规律做题就容易了,直接上树状数组搞搞就行

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define lson l,mid,rt<<1
     4 #define rson mid+1,r,rt<<1|1
     5 #define IT set<ll>::iterator
     6 #define sqr(x) ((x)*(x))
     7 #define pb push_back
     8 #define eb emplace_back
     9 #define maxn 5000005
    10 #define eps 1e-8
    11 #define pi acos(-1.0)
    12 #define rep(k,i,j) for(int k=i;k<j;k++)
    13 typedef long long ll;
    14 typedef pair<int,int> pii;
    15 typedef pair<ll,ll>pll;
    16 typedef pair<ll,int> pli;
    17 typedef pair<pair<int,string>,pii> ppp;
    18 typedef unsigned long long ull;
    19 const long long MOD=998244353;
    20 const double oula=0.57721566490153286060651209;
    21 using namespace std;
    22 
    23 int tree[1505],a[1505];
    24 int m,n;
    25 int lowbit(int x){return x&(-x);}
    26 void add(int x){while(x<=n){tree[x]+=1;x+=lowbit(x);}}
    27 int ask(int x){int sum=0;while(x){sum+=tree[x];x-=lowbit(x);}return sum;}
    28 
    29 
    30 int main(){
    31     std::ios::sync_with_stdio(false);
    32     cin>>n;
    33     for(int i=1;i<=n;i++){
    34         cin>>a[i];
    35     }
    36     int sum=0;
    37     for(int i=n;i;i--){
    38         sum+=ask(a[i]);
    39         add(a[i]);
    40     }
    41     cin>>m;
    42     int x,y;
    43     int ans=sum&1;
    44     for(int i=1;i<=m;i++){
    45         cin>>x>>y;
    46         int len=y-x+1;
    47         len=len*(len-1)/2;
    48         if(len&1) ans^=1;
    49         if(ans) cout<<"odd"<<endl;
    50         else cout<<"even"<<endl;
    51     }
    52 }
    View Code

    E

    题意:给定 n,m(n>=m),先给出m个数,然后让你补全剩下的n-m个数,使的字典序最大且可以通过栈使它变成1-n的顺序序列

    思路:先判断给定的数能不能通过模拟栈的方法顺序输出,可以的话就从大到小补全小于栈顶元素且未出现过的数。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define lson l,mid,rt<<1
     4 #define rson mid+1,r,rt<<1|1
     5 #define IT set<ll>::iterator
     6 #define sqr(x) ((x)*(x))
     7 #define pb push_back
     8 #define eb emplace_back
     9 #define maxn 5000005
    10 #define eps 1e-8
    11 #define pi acos(-1.0)
    12 #define rep(k,i,j) for(int k=i;k<j;k++)
    13 typedef long long ll;
    14 typedef pair<int,int> pii;
    15 typedef pair<ll,ll>pll;
    16 typedef pair<ll,int> pli;
    17 typedef pair<pair<int,string>,pii> ppp;
    18 typedef unsigned long long ull;
    19 const long long MOD=998244353;
    20 const double oula=0.57721566490153286060651209;
    21 using namespace std;
    22 
    23 int a[200005];
    24 stack<int>st;
    25 
    26 int main(){
    27     std::ios::sync_with_stdio(false);
    28     int n,m;
    29     cin>>n>>m;
    30     for(int i=1;i<=m;i++){
    31         cin>>a[i];
    32     }
    33     int k=n-m;
    34     int i=1;
    35     int co=1;
    36     int flag=0;
    37     while(i<=m){
    38         if(co!=a[i]){
    39             st.push(a[i]);
    40             i++;
    41         }
    42         else{
    43             co++;
    44             i++;
    45             while(!st.empty()&&st.top()==co){
    46                 co++;
    47                 st.pop();
    48             }
    49         }
    50     }
    51     if(!st.empty()){
    52         int pre=st.top();
    53         st.pop();
    54         while(!st.empty()){
    55             if(pre>st.top()){
    56                 flag=1;
    57                 break;
    58             }
    59             pre=st.top();
    60             st.pop();
    61         }
    62     }
    63     if(flag==1){
    64         cout<<-1<<endl;
    65     }
    66     else{
    67         int i=1;
    68         int co=1;
    69         while(i<=m){
    70             if(co!=a[i]){
    71                 st.push(a[i]);
    72                 i++;
    73             }
    74             else{
    75                 co++;
    76                 i++;
    77                 while(!st.empty()&&st.top()==co){
    78                     co++;
    79                     st.pop();
    80                 }
    81             }
    82         }
    83         while(!st.empty()){
    84             int tmp=st.top();
    85             st.pop();
    86             for(i=tmp-1;i>=co;i--){
    87                 a[++m]=i;
    88             }
    89             co=tmp+1;
    90         }
    91         for(int i=n;i>=co;i--) a[++m]=i;
    92         for(int i=1;i<=m;i++){
    93             cout<<a[i]<<" ";
    94         }
    95     }
    96 }
    View Code

    F

    题意:给你一棵树,每次选这棵树的两个叶子,加上他们之间的距离,然后将其中一个点去掉,问你距离之和最大可以是多少。

    思路:要求距离之和最大,肯定是需要把树的直径求出来,然后依次减去非直径上的点,最后减去直径上的点

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define lson l,mid,rt<<1
     4 #define rson mid+1,r,rt<<1|1
     5 #define IT set<ll>::iterator
     6 #define sqr(x) ((x)*(x))
     7 #define pb push_back
     8 #define eb emplace_back
     9 #define maxn 200005
    10 #define eps 1e-8
    11 #define pi acos(-1.0)
    12 #define rep(k,i,j) for(int k=i;k<j;k++)
    13 typedef long long ll;
    14 typedef pair<int,int> pii;
    15 typedef pair<ll,ll>pll;
    16 typedef pair<ll,int> pli;
    17 typedef pair<pair<int,string>,pii> ppp;
    18 typedef unsigned long long ull;
    19 const long long MOD=998244353;
    20 const double oula=0.57721566490153286060651209;
    21 using namespace std;
    22 
    23 int n;
    24 vector<int>ve[200005];
    25 vector<pair<int,pair<int,int> > >ans;
    26 int deep[200005],fa[200005],book[200005];
    27 ll sum;
    28 int pos1,pos2;
    29 
    30 void dfs1(int now,int pre){
    31     for(int i=0;i<ve[now].size();i++){
    32         if(ve[now][i]!=pre){
    33             deep[ve[now][i]]=deep[now]+1;
    34             fa[ve[now][i]]=now;
    35             dfs1(ve[now][i],now);
    36         }
    37     }
    38 }
    39 
    40 void dfs2(int now,int pre,int d){
    41     if(book[now]) d++;
    42     for(int i=0;i<ve[now].size();i++){
    43         if(pre!=ve[now][i]){
    44             dfs2(ve[now][i],now,d);
    45             if(!book[ve[now][i]]){
    46                 int dep1=deep[ve[now][i]];
    47                 int dep2=deep[pos2]+deep[ve[now][i]]-2*d;
    48                 if(dep1>=dep2){
    49                     sum+=dep1;
    50                     ans.pb({pos1,{ve[now][i],ve[now][i]}});
    51                 }
    52                 else{
    53                     sum+=dep2;
    54                     ans.pb({pos2,{ve[now][i],ve[now][i]}});
    55                 }
    56             }
    57         }
    58     }
    59 }
    60 
    61 
    62 int main(){
    63     std::ios::sync_with_stdio(false);
    64     cin>>n;
    65     int u,v;
    66     for(int i=1;i<n;i++){
    67         cin>>u>>v;
    68         ve[u].pb(v);
    69         ve[v].pb(u);
    70     }
    71     dfs1(1,0);
    72     pos1=0,pos2=0;
    73     for(int i=1;i<=n;i++){
    74         if(deep[i]>deep[pos1]){
    75             pos1=i;
    76         }
    77     }
    78     deep[pos1]=0,fa[pos1]=0;
    79     dfs1(pos1,0);
    80     for(int i=1;i<=n;i++){
    81         if(deep[i]>deep[pos2]){
    82             pos2=i;
    83         }
    84     }
    85     for(int i=pos2;i!=pos1;i=fa[i]) book[i]=1;
    86     dfs2(pos1,0,0);
    87     for(int i=pos2;i!=pos1;i=fa[i]){
    88         ans.pb({pos1,{i,i}});
    89         sum+=deep[i];
    90     }
    91     cout<<sum<<endl;
    92     for(int i=0;i<ans.size();i++){
    93         cout<<ans[i].first<<" "<<ans[i].second.first<<" "<<ans[i].second.second<<endl;
    94     }
    95 }
    View Code

    G

    题意:给出一个数列,有q个操作,每种操作是把区间[l,r]中等于x的数改成y.输出q步操作完的数列

    思路:因为数列中的值为1-100,所以用线段树暴力修改

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define lson l,mid,rt<<1
     4 #define rson mid+1,r,rt<<1|1
     5 #define IT set<ll>::iterator
     6 #define sqr(x) ((x)*(x))
     7 #define pb push_back
     8 #define eb emplace_back
     9 #define maxn 200005
    10 #define eps 1e-8
    11 #define pi acos(-1.0)
    12 #define rep(k,i,j) for(int k=i;k<j;k++)
    13 typedef long long ll;
    14 typedef pair<int,int> pii;
    15 typedef pair<ll,ll>pll;
    16 typedef pair<ll,int> pli;
    17 typedef pair<pair<int,string>,pii> ppp;
    18 typedef unsigned long long ull;
    19 const long long MOD=998244353;
    20 const double oula=0.57721566490153286060651209;
    21 using namespace std;
    22 
    23 int lazy[maxn<<2][105];
    24 int a[maxn];
    25 int n;
    26 
    27 void build(int l,int r,int rt){
    28     for(int i=1;i<=100;i++){
    29         lazy[rt][i]=i;
    30     }
    31     if(l==r) return;
    32     int mid=l+r>>1;
    33     build(lson);
    34     build(rson);
    35 }
    36 
    37 void push_down(int rt){
    38     for(int i=1;i<=100;i++){
    39         lazy[rt<<1][i]=lazy[rt][lazy[rt<<1][i]];
    40         lazy[rt<<1|1][i]=lazy[rt][lazy[rt<<1|1][i]];
    41     }
    42     for(int i=1;i<=100;i++){
    43         lazy[rt][i]=i;
    44     }
    45 }
    46 
    47 void update(int L,int R,int x,int y,int l,int r,int rt){
    48     if(L<=l&&R>=r){
    49         for(int i=1;i<=100;i++){
    50             if(lazy[rt][i]==x){
    51                 lazy[rt][i]=y;
    52             }
    53         }
    54         return;
    55     }
    56     push_down(rt);
    57     int mid=l+r>>1;
    58     if(L<=mid) update(L,R,x,y,lson);
    59     if(R>mid) update(L,R,x,y,rson);
    60 }
    61 
    62 void query(int l,int r,int rt){
    63     if(l==r){
    64         cout<<lazy[rt][a[l]]<<" ";
    65         return;
    66     }
    67     push_down(rt);
    68     int mid=l+r>>1;
    69     query(lson);
    70     query(rson);
    71 }
    72 
    73 int main(){
    74     std::ios::sync_with_stdio(false);
    75     cin>>n;
    76     for(int i=1;i<=n;i++) cin>>a[i];
    77     build(1,n,1);
    78     int q;
    79     cin>>q;
    80     int l,r,x,y;
    81     while(q--){
    82         cin>>l>>r>>x>>y;
    83         update(l,r,x,y,1,n,1);
    84     }
    85     query(1,n,1);
    86 }
    View Code
  • 相关阅读:
    一个FLAG #03# 蛇形填数
    一个FLAG #02# 逆序输出
    一个FLAG #01# 重学C/C++以及算法
    MAVLink笔记 #01# 维基百科翻(译)
    编译原理 #04# 中缀表达式转化为四元式(JavaScript实现)
    Java开发:手机电话号码校验
    解决java poi循环遍历行getLastRowNum出现不准确的问题
    Redis的安装和简单测试
    JS解析xml字符串,并把xml展示在HTML页面上
    解决cxf+springmvc发布的webservice,缺少types,portType和message标签的问题
  • 原文地址:https://www.cnblogs.com/Fighting-sh/p/10633378.html
Copyright © 2011-2022 走看看