A. Antipalindrome

还以为是什么神dp结果就是分情况讨论啊

原串是一串一样的字符的话输出0,是回文串的话输出n-1,否则直接输出原串长度

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=55;
int n;
char s[N];
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
int f=1;
for(int i=1;i<n;i++)
if(s[i]!=s[i+1])
{
f=0;
break;
}
if(f)
{
puts("0");
return 0;
}
f=1;
for(int i=1;i<=n/2;i++)
if(s[i]!=s[n-i+1])
{
f=0;
break;
}
printf("%d\n",n-f);
return 0;
}

B. Businessmen Problems

hash一下,然后对每个化学元素取收入最大值即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
const int N=200005;
int n,m,a[N],b[N],c[N],d[N],g[N],tot,has,ans[N];
long long sum;
map<int,int>mp;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
a[i]=read(),c[i]=read(),g[++tot]=a[i];
m=read();
for(int i=1;i<=m;i++)
b[i]=read(),d[i]=read(),g[++tot]=b[i];
sort(g+1,g+1+tot);
for(int i=1;i<=tot;i++)
if(i==1||g[i]!=g[i-1])
mp[g[i]]=++has;
for(int i=1;i<=n;i++)
ans[mp[a[i]]]=c[i];
for(int i=1;i<=m;i++)
ans[mp[b[i]]]=max(ans[mp[b[i]]],d[i]);
for(int i=1;i<=has;i++)
sum+=1ll*ans[i];
printf("%lld\n",sum);
return 0;
}

C. Useful Decomposition

有三种可能情况:所有链在某一点上相交,也就是只有一个点度数>2;只有一条链,就是两个点度数为1,其他点度数为2;不符合要求的情况,就是有超过一个点度数>2

#include<iostream>
#include<cstdio>
using namespace std;
const int N=200005;
int n,d[N],sum,con,p,ans[N],tot;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read();
for(int i=1;i<n;i++)
{
int x=read(),y=read();
d[x]++,d[y]++;
}
for(int i=1;i<=n;i++)
{
if(d[i]>2)
p=i,sum++;
if(d[i]==1)
ans[++tot]=i,con++;
}
if(sum>1)
{
puts("No");
return 0;
}
if(sum==0)
{
printf("Yes\n1\n%d %d\n",ans[1],ans[2]);
return 0;
}
printf("Yes\n%d\n",con);
for(int i=1;i<=n;i++)
if(d[i]==1)
printf("%d %d\n",p,i);
return 0;
}

D. Bookshelves

很好的dp

或许应该叫按位贪心?从高位到低位枚举,然后f[i][j]表示到j为止分为i段能否让当前枚举的位为1,转移的时候也要注意满足之前枚举的位能不变为0

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=55;
int n,k;
long long a[N],ans;
bool f[N][N];
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
for(int i=60;i>=0;i--)
{
memset(f,0,sizeof(f));
f[0][0]=1;
for(int j=0;j<k;j++)
for(int l=0;l<n;l++)
if(f[j][l])
{
long long sum=0;
for(int d=l;d<n;d++)
{
sum+=a[d];
if((sum&ans)==ans&&(sum&(1ll<<i)))
f[j+1][d+1]=1;
}
}
if(f[k][n])
ans|=1ll<<i;
}
printf("%lld\n",ans);
return 0;
}

E. Addition on Segments

还是非常好的dp

设f[i]为i为最大值时出现的最右位置,然后把修改操作按r排序,每次用修改操作更新f即可

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=10005;
int n,q,f[N];
struct qwe
{
int l,r,x;
}a[N];
bool cmp(const qwe &a,const qwe &b)
{
return a.r<b.r;
}
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read(),q=read();
for(int i=1;i<=q;i++)
a[i].l=read(),a[i].r=read(),a[i].x=read();
sort(a+1,a+1+q,cmp);
for(int i=1;i<=q;i++)
{
for(int j=n-a[i].x;j>=1;j--)
if(f[j]>=a[i].l)
f[j+a[i].x]=max(f[j+a[i].x],f[j]);
f[a[i].x]=a[i].r;
}
int ans=0;
for(int i=1;i<=n;i++)
if(f[i]>0)
ans++;
printf("%d\n",ans);
for(int i=1;i<=n;i++)
if(f[i]>0)
printf("%d ",i);
return 0;
}

Avito Code Challenge 2018 A~E的更多相关文章

  1. Codeforces Avito Code Challenge 2018 D. Bookshelves

    Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...

  2. Codeforces - Avito Code Challenge 2018

    Portal A. Antipalindrome 暴力. B. Businessmen Problems 暴力. C. Useful Decomposition 居然不是C打头的?! 将一棵树划分成若 ...

  3. cf掉分记——Avito Code Challenge 2018

    再次作死的打了一次cf的修仙比赛感觉有点迷.. 还好掉的分不多(原本就太低没法掉了QAQ) 把会做的前三道水题记录在这.. A: Antipalindrome emmmm...直接暴力枚举 code: ...

  4. Avito Code Challenge 2018

    第一次打CF,很菜,A了三道水题,第四题好像是是数位DP,直接放弃了.rateing从初始的1500变成了1499,还是绿名,这就很尴尬.之后觉得后面的题目也没有想象的那么难(看通过人数)过两天吧剩下 ...

  5. Avito Code Challenge 2018 C

    C. Useful Decomposition time limit per test 1 second memory limit per test 256 megabytes input stand ...

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

    题目链接:http://codeforces.com/contest/981/problem/G 题目大意: 有n个初始为空的‘魔法’可重集,向一个‘可重集’加入元素时,若该元素未出现过,则将其加入: ...

  7. Avito Cool Challenge 2018 E. Missing Numbers 【枚举】

    传送门:http://codeforces.com/contest/1081/problem/E E. Missing Numbers time limit per test 2 seconds me ...

  8. Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】

    传送门:http://codeforces.com/contest/1081/problem/C C. Colorful Bricks time limit per test 2 seconds me ...

  9. Avito Cool Challenge 2018 B. Farewell Party 【YY】

    传送门:http://codeforces.com/contest/1081/problem/B B. Farewell Party time limit per test 1 second memo ...

随机推荐

  1. <转> 二分图多重匹配问题

    在二分图最大匹配中,每个点(不管是X方点还是Y方点)最多只能和一条匹配边相关联,然而,我们经常遇到这种问题,即二分图匹配中一个点可以和多条匹配边相关联,但有上限,或者说,Li表示点i最多可以和多少条匹 ...

  2. 九度oj 题目1074:对称平方数

    题目1074:对称平方数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6422 解决:2912 题目描述: 打印所有不超过n(n<256)的,其平方具有对称性质的数. 如11*11 ...

  3. [BZOJ1179] [Apio2009]Atm(tarjan缩点 + spfa)

    传送门 题意 N个点M条边的有向图 每个点有点权 从某一个结点出发 问能获得的最大点权和 一个点的点权最多被计算一次 N<=500000 M<=500000 思路 先tarjan缩点,然后 ...

  4. python 安装依赖几个问题---HttpScan

    https://blog.csdn.net/chenggong2dm/article/details/61923420 https://www.cnblogs.com/caochuangui/p/59 ...

  5. JAVA初级复习知识点归纳

    JDK的安装: 下载.安装 配置环境变量 a) path:.;%JAVA_HOME%\bin; b) JAVA_HOME:JDK的安装目录 c) classpath JDK和JRE和JVM: JAVA ...

  6. Linux系统备份还原工具1(DD)(应用实例)

    DD使用教程:http://www.cnblogs.com/EasonJim/p/7442223.html 以下实例没经过大量测试,可能在一些机器上不会有效. 一般围绕以下几点进行设置: 1.dd完后 ...

  7. firemonkey获取当前文件所在路径的方法

    在之前,我们知道有三种方法: ExtractFilePath(ParamStr(0)) ExtractFilePath(Application.ExeName) GetCurrentDir + '\' ...

  8. the apple code

    i know you will forget but 9 you will

  9. Installation error: INSTALL_FAILED_VERSION_DOWNGRADE Android

    我们在安装新的 APk 的时候.会出现 Installation error: INSTALL_FAILED_VERSION_DOWNGRADE 原因:  是由于 androidversionCode ...

  10. C++ Primer高速入门之五:有用的模板库

    更新:又一次排版代码格式 除上篇博客介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类 型标准库. 包含 string 和 vector,它们分别定义了字符串和矢量(集合).string ...