链接:http://codeforces.com/contest/1114


A - Got Any Grapes?

题意:甲乙丙三个人吃葡萄,总共有三种葡萄:绿葡萄、紫葡萄和黑葡萄,甲乙丙三个人至少要各自吃 $x,y,z$ 个葡萄,又甲只吃绿葡萄,乙不吃黑葡萄,丙三种颜色都吃。现在总共有 $a$ 个绿葡萄、$b$ 个紫葡萄、$c$ 个黑葡萄。要确认这么多葡萄能否使得三个人都满意。

题解:优先满足甲,剩下的绿葡萄加紫葡萄满足乙,最后再剩下的看看能不能满足丙。

AC代码:

#include<bits/stdc++.h>
using namespace std;
int x,y,z,a,b,c;
int main()
{
cin>>x>>y>>z>>a>>b>>c;
if(a>=x && (a-x)+b>=y && a-x+b-y+c>=z) cout<<"YES\n";
else cout<<"NO\n";
}

B - Yet Another Array Partitioning Task - [贪心]

题意:将一个长度为 $n$ 的数组分成 $k$ 段,每段元素至少要有 $m$ 个,设每一段都有一个“漂亮程度”为该段的前 $m$ 大的元素之和,求如何分割这个数组,使得每一段的“漂亮程度”之和最大。

题解:这个数组的前 $m \cdot k$ 大个元素就是答案,假设这 $m \cdot k$ 个元素的集合为 $S$。那么如何分割,即在原数组中枚举,每累计遇到 $m$ 个属于 $S$ 的元素,就在这个位置划一刀,然后重新开始累计即可。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define mk(x,y) make_pair(x,y)
#define a(p) (p.first)
#define b(p) (p.second)
const int maxn=2e5+;
int n,m,k;
int a[maxn];
bool t[maxn];
vector<pii> v;
int main()
{
cin>>n>>m>>k;
for(int i=;i<=n;i++) scanf("%d",&a[i]), v.push_back(mk(a[i],i));
sort(v.begin(),v.end(),greater<pii>());
memset(t,,sizeof(t));
ll sum=;
for(int i=;i<(m*k);i++) t[b(v[i])]=, sum+=a(v[i]);
cout<<sum<<endl;
int cnt=, seg=;
for(int i=;i<=n;i++)
{
if(t[i]) cnt++;
if(cnt==m)
{
cnt=, seg++;
if(seg<k) printf("%d ",i);
}
}
}

C - Trailing Loves (or L'oeufs?) - [分解质因数]

题意:给定一个十进制下的 $n$,要求出 $n!$ 在 $b$ 进制下进行表示,其尾部有多少个零。

题解:

换句话说,其实就是算 $n!$ 最多能整除多少次 $b$。对 $b$ 分解质因数得 $b = {p_1}^{x_1}{p_2}^{x_2} \cdots {p_k}^{x_k}$,然后只要算出 $n!$ 对应的 ${p_1}^{y_1}{p_2}^{y_2} \cdots {p_k}^{y_k}$ 就很好办了。

然后用十进制举例,例如 $n = 12$,那么先考虑 $10$ 进制的 $10 = 2 \times 5$,然后 $n / 2 = 6$ 我们就可以知道 $1 \sim 12$ 有 $[2,4,6,8,10,12]$ 这六个 $2$ 的倍数,每个数至少能提供 $2$ 的 $1$ 次方,而其中又有一部分能多提供一些,即 $n / 2^2 = 3$,即有 $[4,8,12]$ 这三个数字至少能提供 $2$ 的 $2$ 次方,考虑到这三个数字前面已经计算过提供一次,所以可以看做这三个数又提供了三个 $1$ 次方,再然后 $n / 2^3 = 12 / 8 = 1$,即 $[8]$ 这一个数字还能再多提供一个 $1$ 次方。因此总结下来,计算 $n!$ 到底包含多少个 $p_i$ 的 $x$ 次方通过 $n/p_i + n/p_i^2 + \cdots $ 就可以算出来。

所以类似地,我们对 $p_1 \cdots p_k$,每个都算出 $n!$ 包含其多少次方,最后取 $\lfloor \frac{y_i}{x_i} \rfloor$ 的最小值。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef pair<ull,int> P;
#define mk(x,y) make_pair(x,y)
#define _1 first
#define _2 second vector<P> p;
void dec(ull n)
{
p.clear();
for(ull i=;i*i<=n;i++)
{
if(n%i==)
{
int cnt=;
while(n%i==) n/=i, cnt++;
p.push_back(mk(i,cnt));
}
}
if(n>) p.push_back(mk(n,));
} ull solve(ull n,ull p)
{
ull base=, res=;
while(base<=n/p)
{
base*=p;
res+=n/base;
}
return res;
} int main()
{
ull n,b;
cin>>n>>b;
dec(b);
ull ans=ULLONG_MAX;
for(auto x:p) ans=min(ans,solve(n,x._1)/x._2);
cout<<ans<<endl;
}

D - Flood Fill - [区间DP]

题意:在一条线上给定 $n$ 个方格,每个方格都上了一种颜色,当尽量最长的一段的若干个连续方格颜色一样时,可以看做一个连通块。我们开始时要选择一个起点方格,然后我们可以不断地将该方格所属的整个连通块全部变为另一个颜色,每变一次算一轮,求最少多少轮可以使得 $n$ 个方格变为一个连通块。

题解:首先我们知道,连通块是逐渐扩张的,而且一个连通块的颜色,要么是最左边的那个方块的颜色,要么是最右边的方块的颜色。

因此记 $f[0,1][i][j]$ 表示 $[i,j]$ 区间内所有方块变成最左侧方块颜色的最少轮次,以及变成最右侧方块颜色的最少轮次。

那么显然初始状态就是所有的 $f[0,1][i][i] = 0$,而对于一个 $f[0,1][i][j]$,它可能是 $f[0,1][i+1][j]$ 转移过来的,也可能是 $f[0,1][i][j-1]$ 转移过来的,若 $c[i]=c[j]$ 的话那么还有可能是 $f[0,1][i+1][j-1]$ 转移过来的。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=5e3+;
int n,c[maxn];
int f[][maxn][maxn];
int main()
{
cin>>n;
for(int i=;i<=n;i++) cin>>c[i];
memset(f,0x3f,sizeof(f));
for(int i=;i<=n;i++) f[][i][i]=f[][i][i]=;
for(int len=,tp;len<=n;len++)
{
for(int i=,j=i+len-;j<=n;i++,j++)
{
tp=min(f[][i+][j]+(c[i]!=c[i+]),f[][i+][j]+(c[i]!=c[j]));
f[][i][j]=min(f[][i][j],tp); tp=min(f[][i][j-]+(c[i]!=c[j]),f[][i][j-]+(c[j-]!=c[j]));
f[][i][j]=min(f[][i][j],tp); if(c[i]==c[j])
{
tp=min(f[][i+][j-]+(c[i+]!=c[i]),f[][i+][j-]+(c[j-]!=c[j]));
f[][i][j]=min(f[][i][j],tp), f[][i][j]=min(f[][i][j],tp);
}
}
}
cout<<min(f[][][n],f[][][n])<<endl;
}

PS.作为一个DP废物,每每遇到DP题就很艰辛……


E - Arithmetic Progression - [二分+随机数]


F - Please, another Queries on Array? - (Undone)

Codeforces 1114 - A/B/C/D/E/F - (Undone)的更多相关文章

  1. Codeforces 1132 - A/B/C/D/E/F - (Undone)

    链接:http://codeforces.com/contest/1132 A - Regular Bracket Sequence - [水] 题解:首先 "()" 这个的数量多 ...

  2. Codeforces 1043 - A/B/C/D/E/F - (Undone)

    链接:http://codeforces.com/contest/1043 A - Elections - [水水水水题] 题意: 我和另一个人竞争选举,共有 $n$ 个人投票,每个人手上有 $k$ ...

  3. Codeforces 1100 - A/B/C/D/E/F - (Undone)

    链接:https://codeforces.com/contest/1100 A - Roman and Browser - [暴力枚举] 题意:浏览器有 $n$ 个网页,编号 $1 \sim n$, ...

  4. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  5. Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块

    Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块 [Problem Description] ​ ...

  6. Codeforces Bubble Cup 8 - Finals [Online Mirror] F. Bulbo DP

    F. Bulbo Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/F Des ...

  7. Codeforces 1154 - A/B/C/D/E/F/G - (Undone)

    链接:https://codeforces.com/contest/1154 A - Restoring Three Numbers - [水] #include<bits/stdc++.h&g ...

  8. Educational Codeforces Round 58 (Rated for Div. 2) F dp + 优化(新坑) + 离线处理

    https://codeforces.com/contest/1101/problem/F 题意 有n个城市,m辆卡车,每辆卡车有起点\(s_i\),终点\(f_i\),每公里油耗\(c_i\),可加 ...

  9. Codeforces 670 - A/B/C/D/E/F - (Done)

    链接:https://codeforces.com/contest/670 A - Holidays - [水] AC代码: #include<bits/stdc++.h> using n ...

随机推荐

  1. MySQL 5.5主从关于‘复制过滤’的深入探究

    关于MySQL主从复制的过滤,例如通过binlog-ignore-db.replicate-do-db.replicate-wild-do-table等.如果不好好研究过这些过滤选项就用的话,是有可能 ...

  2. 分析技术和方法论营销理论知识框架,营销方面4P、用户使用行为、STP,管理方面5W2H、逻辑树、金字塔、生命周期

    原文:五种分析框架:PEST.5W2H.逻辑树.4P.用户使用行为 最近在一点点的啃<谁说菜鸟不懂得数据分析>,相当慢,相当的费脑力,总之,真正的学习伴随着痛苦:) 最初拿到这本书的时候, ...

  3. Atitit 如何在水泥森林打猎 找到合适的公司

    Atitit 如何在水泥森林打猎  找到合适的公司 1. 我们工作的本质就是打猎,万年前在草原森林里面打猎,现在在水泥森林里面打猎 2 1.1. 我们的本质职位只有一个,那就是猎人 2 1.2. 所有 ...

  4. [svc]证书学习索引

    数字证书基础知识 对称加密/非对称加密细枝末节 openssl对称非对称加密实战 使用OpenSSL实现CA证书的搭建过程 通过openssl生成证书 HTTPS证书生成原理和部署细节 证书各个字段的 ...

  5. Unity调用安卓Android的Toast

    需求:在游戏中弹窗消息,调起安卓的Toast 项目中需要做Unity和安卓交互时,经常需要通过安卓Toast来做简单的输出,以便于测试. 方法一:Unity中,C#主导 // Unity调用安卓的土司 ...

  6. LoRa基础

    一.LoRa技术 LoRa 是LPWAN通信技术中的一种,是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案.这一方案改变了以往关于传输距离与功耗的折衷考虑方式,为用户提供一种 ...

  7. Direct3D 11 Tutorial 2: Rendering a Triangle_Direct3D 11 教程2:渲染一个三角形

    概要 在之前的教程中,我们建立了一个最小的Direct3D 11的应用程序,它用来在窗口上输出一个单一颜色.在本次教程中,我们将扩展这个应用程序,在屏幕上渲染出一个单一颜色的三角形.我们将通过设置数据 ...

  8. 5.动态代理AOP实现-DynamicProxy模式

    通过动态代理模式Interceptor实现在RegUser()方法本身业务前后加上一些自己的功能,如:PreProceed和PostProceed,即不修改UserProcessor类又能增加新功能 ...

  9. list add对象踩的坑

    list 添加对象时,没有把new object写到循环体里,导致最后添加了相同的一个对象: public List<goods> find(String goodsname) { Lis ...

  10. 乾坤合一~Linux设备驱动之USB主机和设备驱动

    如果不能陪你到最后 是否后悔当初我们牵手 如果当初没能遇见你 现在的我 在哪里逗留 所有的爱都是冒险 那就心甘情愿 等待我们一生中 所有悬念 我一往情深的恋人 她是我的爱人 她给我的爱就像是 带着露水 ...