ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《Codeforces Round #668 (Div. 2)》

2020-09-12 08:33:34  阅读:261  来源: 互联网

标签:const cout 668 int Codeforces rg Div dis define


最近又变怠惰了~~。努力找回状态吧。

A:签到题。

// Author: levil
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<string,int> pii;
const int N = 1e6+5;
const int M = 2e5+5;
const LL Mod = 1e9+7;
#define rg register
#define pi acos(-1)
#define INF 1e9
#define CT0 cin.tie(0),cout.tie(0)
#define IO ios::sync_with_stdio(false)
#define dbg(ax) cout << "now this num is " << ax << endl;
namespace FASTIO{
    inline LL read(){
        LL x = 0,f = 1;char c = getchar();
        while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
        while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
        return x*f;
    }
    void print(int x){
        if(x < 0){x = -x;putchar('-');}
        if(x > 9) print(x/10);
        putchar(x%10+'0');
    }
}
using namespace FASTIO;
void FRE(){/*freopen("data1.in","r",stdin);
freopen("data1.out","w",stdout);*/}

int p[105];
int main()
{
    int ca;ca = read();
    while(ca--)
    {
        int n;n = read();
        for(rg int i = 1;i <= n;++i) p[i] = read();
        for(rg int i = n;i >= 1;--i) printf("%d%c",p[i],i == 1 ? '\n' : ' ');
    }
  //  system("pause");    
}
View Code

B:签到题。

// Author: levil
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<string,int> pii;
const int N = 1e5+5;
const int M = 2e5+5;
const LL Mod = 1e9+7;
#define rg register
#define pi acos(-1)
#define INF 1e9
#define CT0 cin.tie(0),cout.tie(0)
#define IO ios::sync_with_stdio(false)
#define dbg(ax) cout << "now this num is " << ax << endl;
namespace FASTIO{
    inline LL read(){
        LL x = 0,f = 1;char c = getchar();
        while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
        while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
        return x*f;
    }
    void print(int x){
        if(x < 0){x = -x;putchar('-');}
        if(x > 9) print(x/10);
        putchar(x%10+'0');
    }
}
using namespace FASTIO;
void FRE(){/*freopen("data1.in","r",stdin);
freopen("data1.out","w",stdout);*/}

int a[N];
int main()
{
    int ca;ca = read();
    while(ca--)
    {
        int n;n = read();
        LL sum = 0,ans = 0,dis = 0;
        for(rg int i = 1;i <= n;++i) a[i] = read();
        for(rg int i = 1;i <= n;++i)
        {
           // printf("sum is %lld dis is %lld\n",sum,dis);
            if(a[i] == 0) continue;
            if(a[i] < 0)
            {
                a[i] = -a[i];
                if(sum >= a[i]) sum -= a[i];
                else 
                {
                    a[i] -= sum,ans += a[i],sum = 0;
                    dis += a[i];
                }
            }
            else sum += a[i];
        }
        sum -= min(sum,dis);
        ans += sum;
        printf("%lld\n",ans);
    }
   // system("pause");    
}
View Code

 C:这题一开始一直觉得是构造。。

首先,我们考虑前k个位置,假设前k个位置都已经放置好了。

那么这里就是一个类似滑动窗口,对于下一个k的块,我们减去了a[1],加上了a[k+1]。

那么,如果要保持平衡,显然a[k+1] = a[1]。

那么我们继续移动,就可以发现,对于所有同余的位置,他们的值都应该是一样的。

所以就变成了去判断同余的位置是否都一样。

并且这里要统计0和1的个数是否超过了k/2.如果超过了就说明也不行。

这里的"?",我们可以不去管,因为如果满足另外两个条件,那么肯定存在一种摆法,满足条件。

// Author: levil
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<string,int> pii;
const int N = 1e5+5;
const int M = 2e5+5;
const LL Mod = 1e9+7;
#define rg register
#define pi acos(-1)
#define INF 1e9
#define CT0 cin.tie(0),cout.tie(0)
#define IO ios::sync_with_stdio(false)
#define dbg(ax) cout << "now this num is " << ax << endl;
namespace FASTIO{
    inline LL read(){
        LL x = 0,f = 1;char c = getchar();
        while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
        while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
        return x*f;
    }
    void print(int x){
        if(x < 0){x = -x;putchar('-');}
        if(x > 9) print(x/10);
        putchar(x%10+'0');
    }
}
using namespace FASTIO;
void FRE(){/*freopen("data1.in","r",stdin);
freopen("data1.out","w",stdout);*/}

int main()
{
    IO;CT0;
    int ca;cin >> ca;
    while(ca--)
    {
        int n,k;cin >> n >> k;
        string s;cin >> s;
        int len = s.size();
        bool flag = false;
        int num[2] = {0};
        for(rg int i = 0;i < k;++i)
        {
            int one = 0,zero = 0;
            for(rg int j = i;j < len;j += k)
            {
                if(s[j] == '?') continue;
                if(s[j] == '1') one++;
                else zero++;
            }
            if(zero != 0 && one != 0) flag = true;
            else if(zero != 0) num[0]++;
            else if(one != 0) num[1]++;
        }
        if(max(num[0],num[1]) > k/2) flag = true;
        if(flag) cout << "NO" << endl;
        else cout << "YES" << endl;
    }
   // system("pause");    
}
View Code

D:博弈论。

其实就是几种情况的分类思考。

1:如果一开始两点之间的距离 <= da,那么alice可以一步直接到。

2:现在,先考虑图为一个无穷大的图。

如果db <= 2*da,那么alice肯定可以走到,因为只要不断保持在da的距离,bob肯定会走到头先。

否则,肯定走不到。

这里因为考虑的是无穷大的图,但是正常的图,肯定不是这样的。

如果当图限制起作用,就是da*2 >= 直径。

那么只要Alice站在直径中点,就可以走到其他任意的点。

然后就可以做了。。直径这里还是蛮妙的。

// Author: levil
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<string,int> pii;
const int N = 2e5+5;
const int M = 2e5+5;
const LL Mod = 1e9+7;
#define rg register
#define pi acos(-1)
#define INF 1e9
#define CT0 cin.tie(0),cout.tie(0)
#define IO ios::sync_with_stdio(false)
#define dbg(ax) cout << "now this num is " << ax << endl;
namespace FASTIO{
    inline LL read(){
        LL x = 0,f = 1;char c = getchar();
        while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
        while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
        return x*f;
    }
    void print(int x){
        if(x < 0){x = -x;putchar('-');}
        if(x > 9) print(x/10);
        putchar(x%10+'0');
    }
}
using namespace FASTIO;
void FRE(){/*freopen("data1.in","r",stdin);
freopen("data1.out","w",stdout);*/}

vector<int> G[N];
int tot,mx,rt1,rt2,n,a,b,da,db;
int dep[N],lg[N<<1],dfn[N<<1],st[N<<1][25],dis[N];
void dfs(int u,int fa)
{
    dep[u] = dep[fa]+1;
    dfn[u] = ++tot;
    st[tot][0] = u;
    if(dep[u] > mx) mx = dep[u],rt1 = u;
    for(auto v : G[u])
    {
        if(v == fa) continue;
        dfs(v,u);
        st[++tot][0] = u;
    }
}
int D_dis(int u,int fa)
{
    dis[u] = dis[fa]+1;
    if(dis[u] > mx) mx = dis[u],rt2 = u;
    for(auto v : G[u]) if(v != fa) D_dis(v,u);
}
void Init()
{
    lg[1] = 0;for(rg int i = 2;i <= tot;++i) lg[i] = lg[i>>1]+1;
    for(rg int j = 1;(1<<j) <= tot;++j)
    {
        for(rg int i = 1;i+(1<<j)-1 <= tot;++i)
        {
            if(dep[st[i][j-1]] <= dep[st[i+(1<<j-1)][j-1]]) st[i][j] = st[i][j-1];
            else st[i][j] = st[i+(1<<j-1)][j-1];
        }
    }
}
int LCA(int x,int y)
{
    x = dfn[x],y = dfn[y];
    if(x > y) swap(x,y);
    int k = lg[y-x+1];
    if(dep[st[x][k]] < dep[st[y-(1<<k)+1][k]]) return st[x][k];
    else return st[y-(1<<k)+1][k];
}
int Dis(int u,int v)
{
    return dep[u]+dep[v]-2*dep[LCA(u,v)];
}
int main()
{
    int ca;ca = read();
    while(ca--)
    {
        tot = 0,mx = -1;
        n = read(),a = read(),b = read(),da = read(),db = read();
        for(rg int i = 1;i <= n;++i) G[i].clear();
        for(rg int i = 1;i < n;++i)
        {
            int u,v;u = read(),v = read();
            G[u].push_back(v);
            G[v].push_back(u);
        }
        dep[0] = 0;dfs(1,0);
        Init();
        mx = -1,dis[0] = 0;D_dis(rt1,0);
        int tdis = Dis(a,b);
        if(da >= tdis) printf("Alice\n");
        else if(db <= 2*da) printf("Alice\n");
        else 
        {
            int D_len = Dis(rt1,rt2);
            if(2*da >= D_len) printf("Alice\n");
            else printf("Bob\n");
        }
    }
   // system("pause");    
}
View Code

 

标签:const,cout,668,int,Codeforces,rg,Div,dis,define
来源: https://www.cnblogs.com/zwjzwj/p/13655748.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有