cf掉分记——Avito Code Challenge 2018

再次作死的打了一次cf的修仙比赛感觉有点迷。。

还好掉的分不多(原本就太低没法掉了QAQ)

把会做的前三道水题记录在这。。

A: Antipalindrome

emmmm...直接暴力枚举

code:

//By Menteur_Hxy
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int n,ans;
char ch[100];

bool jud(int l,int len) {
    int r=l+len-1;
    for(int i=0;i<(len>>1);i++)
        if(ch[l+i]!=ch[r-i]) return 1;
    return 0;
}

bool check(int len) {
    for(int i=1;i+len-1<=n;i++)
        if(jud(i,len)) return 1;
    return 0;
}

int main() {
    scanf("%s",ch+1);
    n=strlen(ch+1);
    for(int i=n;i>1;i--) {
        if(check(i)) {ans=i;break;}
    }
    if(!ans) printf("0");
    else printf("%d",ans);
    return 0;
}

B: Businessmen Problems

用map直接上记下每个元素的最大值最后加起来

code:

//By Menteur_Hxy
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#define M(a,b) memset(a,(b),sizeof(a))
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define LL long long
using namespace std;

LL rd() {
    LL x=0,fla=1; char c=‘ ‘;
    while(c<‘0‘||c>‘9‘) {c=getchar();if(c==‘-‘) fla=-fla;}
    while(c>=‘0‘&&c<=‘9‘) x=x*10+c-‘0‘,c=getchar();
    return x*fla;
}

map <int,int> M;

int main() {
    int n=rd();
    F(i,1,n) {
        int x=rd(),y=rd();
        M[x]=y;
    }
    int m=rd();
    F(i,1,m) {
        int x=rd(),y=rd();
        if(M.count(x)) {
            M[x]=max(M[x],y);
        }else {
            M[x]=y;
        }
    }
    LL ans=0;
    for(map<int,int>::iterator it=M.begin();
        it!=M.end();it++) {
        if(it->second) ans+=it->second;
    }
    printf("%lld",ans);
    return 0;
}   

C: Useful Decomposition

题面略迷。。

大概意思是找到一种方式 分配他所给你的一些边 使组成一些简单路径要求每两条简单路径都有一个公共点

保证给出的边组成一棵树,输出路径数和每条路径的起点和终点 (顺序无所谓)这么水的题 题面就让我看了半天QAQ

显然考虑只有一个公共点,记录每个点连着几条边然后分情况:

1.如果有两个点连着超过两条边说明无法完成

2.如果仅有一个点连边超过两条 答案为以它为端点的所有简单路径

3.如果无连边超过两条的那么只有一条简单路径 且两个只连一条边的点为两端点

code: (略暴力)

//By Menteur_Hxy
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <vector>
#define M(a,b) memset(a,(b),sizeof(a))
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define LL long long
using namespace std;

inline LL rd() {
    LL x=0,fla=1; char c=‘ ‘;
    while(c>‘9‘|| c<‘0‘) {if(c==‘-‘) fla=-fla; c=getchar();}
    while(c<=‘9‘ && c>=‘0‘) x=x*10+c-‘0‘,c=getchar();
    return x*fla;
}

inline void out(LL x){
    int a[25],wei=0;
    if(x<0) putchar(‘-‘),x=-x;
    for(;x;x/=10) a[++wei]=x%10;
    if(wei==0){ puts("0"); return;}
    for(int j=wei;j>=1;--j) putchar(‘0‘+a[j]);
    putchar(‘\n‘);
}

const int N=10010;
const int INF=0x3f3f3f3f;
int n,rt,cnt;
int du[N],head[N];

struct edges{
    int to,next;
}e[N<<2];

void add(int x,int y) {
    e[++cnt].next=head[x];
    e[cnt].to=y;
    head[x]=cnt;
}

int dfs(int x,int pre) {
    for(int i=head[x];i;i=e[i].next) {
        int v=e[i].to;
        if(v!=pre) return dfs(v,x);
    }
    return x;
}

int main() {
    n=rd();
    F(i,1,n-1) {
        int u=rd(),v=rd();
        add(u,v);add(v,u);
        du[u]++,du[v]++;
    }
    F(i,1,n) if(du[i]>2) rt=i;
    F(i,1,n) if(du[i]>2&&i!=rt) {
        printf("No");
        return 0;
    }
    if(!rt) {
        printf("Yes\n1\n");
        F(i,1,n) if(du[i]==1) printf("%d ",i);
        return 0;
    }
    printf("Yes\n%d\n",du[rt]);
    for(int i=head[rt];i;i=e[i].next) {
        int v=e[i].to;
        printf("%d %d\n",rt,dfs(v,rt));
    }
    return 0;
}

后面回头再说吧(不会做QAQ

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.cnblogs.com/Menteur-Hxy/p/9099644.html

原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9099644.html

时间: 2024-10-07 08:33:14

cf掉分记——Avito Code Challenge 2018的相关文章

Codeforces Avito Code Challenge 2018 D. Bookshelves

Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/D Description Mr Keks is a typical white-collar in Byteland. He has a bookshelf in his office with some books on it, each book has an integer positive

[Avito Code Challenge 2018 G] Magic multisets(线段树)

题目链接:http://codeforces.com/contest/981/problem/G 题目大意: 有n个初始为空的‘魔法’可重集,向一个‘可重集’加入元素时,若该元素未出现过,则将其加入:否则该可重集中所有元素的个数都会翻倍. 例如将$2$加入${1,3}$会得到${1,2,3}$,将$2$加入${1,2,3,3}$会得到${1,1,2,2,3,3,3,3}$. $q$次操作,每次操作要么向一个区间内的所有可重集加入某个元素,要么询问一个区间内可重集的大小之和. $n,q ≤ 2×1

Codeforces掉分记 round318(div2)

Codeforces掉分记 round318(div2) 又升回紫名了233,这一次就差一点点就AK了,还没有AK过. (以下题目描述摘自codeforces) A题 Bear and Elections 题目描述 Limak is a grizzly bear who desires power and adoration. He wants to win in upcoming elections and rule over the Bearland. There are n candida

Codeforces Round #545 (Div. 2) 掉分记

每次CF后,我的rating下降,掉分让我悲痛欲绝 ——题记 ### 前言 这次 CF 时间可谓是极好的,17:05 开始,时长 2h 30min. 4:40 回到家,开电脑. 在看了一会书后,比赛开始了. ### 正文 首先,第一个掉分的 flag 出现了! 卡,卡,卡! CF 又双叒叕卡了! 1分钟过去了…… 2分钟过去了…… 3分钟过去了…… Dashboard 一直打不开.. 当时间已经接近 17:10 分的时候,我终于打开了 A 题.. 然而,这还并不是我掉分的所有原因. 先迅速浏览了

CF下分记(

Educational Codeforces Round 80 [Rated for Div. 2] 开题,看A题 ... 这不是水题吗? 然后脑抽写了个神奇的东西,pp了,就没管精度什么的 看B题 啊这个有点恶心,写个暴力吧 写着写着不太对劲,又推了下式子,发现可以简单变形一下然后就出了,交上去, 也pp了 (其实已经一个小时过去了 看C题 诶呀有点恶心,推四十分钟式子推不出来,无奈又去看了一眼题目,发现看错题了,我艹你个百度翻译(bushi 又过了十分钟... 好像是个组合数啊 时间到了,凉

Codeforces Round 480 Div 2 光荣掉分记

痛 痛苦 痛苦啊. 越接近黄名想的越多了啊…… 都说了不要在意rating这破玩意了…… 没出E就算了,策略问题. 居然还FST了: FST个D就算了: FST个A算个**啊. 紧张的时候总会写出一些垃圾代码. 痛苦啊. 原文地址:https://www.cnblogs.com/cxhscst2/p/9017306.html

Avito Cool Challenge 2018 B - Farewell Party

题目大意: 有n个人 接下来一行n个数a[i] 表示第i个人描述其他人有a[i]个的帽子跟他不一样 帽子编号为1~n 如果所有的描述都是正确的 输出possible 再输出一行b[i] 表示第i个人的帽子的编号 如果存在矛盾 输出impossible 如果存在p 个人都描述有q个人跟他们的帽子不一样 此时若 p+q=n 说明正确且这p个人的帽子都一样 如 a[] = 3 3 2 2 2 ,此时一种解为 b[] = 1 1 2 2 2 存在p=2个人描述有q=3个人跟他们不一样 说明这两个人的帽子

Avito Cool Challenge 2018:C. Colorful Bricks

C. Colorful Bricks 题目链接:https://codeforces.com/contest/1081/problem/C 题意: 有n个横向方块,一共有m种颜色,然后有k个方块的颜色与其左边的颜色不同(第一个除外),问一共有多少染色方案. 题解: 我们首先来考虑一下dp. 设dp(i,j)为当前第i个方块,一共有j个方块与它前面的方块不同的方案个数. 那么转移方程为dp(i,j)=dp(i-1,j-1)*(m-1)+dp(i-1,j). 代码如下: #include <bits

Avito Cool Challenge 2018 A. B题解

A. Definite Game 题目链接:https://codeforces.com/contest/1081/problem/A 题意: 给出一个数v,然后让你可以重复多次减去一个数d,满足v%d!=0,问最后可以得到最小的是多少. 题解: 除开v=2输出2,其余直接输出1就行了= =/ 代码如下: #include <bits/stdc++.h> using namespace std; int main(){ int v; cin>>v; cout<<(v==