Codeforces Round #419 (Div. 2) A-E
上紫啦!
E题1:59压哨提交成功翻盘
(1:00就做完了调了一个小时,还好意思说出来? (逃))
题面太长就不复制了,但是配图很可爱所以要贴过来
九条可怜酱好可爱呀
询问从当前时刻过多久,时间会形成回文串的形式。
暴力呀暴力
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int a,b;
int test(){
if(a/ == b% && a%==b/)return ;
return ;
}
int main(){
a=read();b=read();
for(int i=;i>=;i++){
if(test()){
printf("%d\n",i);
return ;
}
b++;
if(b>)b=,a++;
if(a>)a=;
}
return ;
}
A
扫描 前缀和
询问区间内有多少数出现次数超过K次
显然可以差分+前缀和
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int smm[mxn];
int f[mxn];
int n,K,Q;
int main(){
int i,j,a,b;
n=read();K=read();Q=read();
for(i=;i<=n;i++){
a=read();b=read();
smm[a]++;
smm[b+]--;
}
for(i=;i<=;i++){
f[i]=f[i-];
smm[i]+=smm[i-];
if(smm[i]>=K)f[i]++;
}
while(Q--){
a=read();b=read();
int ans=f[b]-f[a-];
printf("%d\n",ans);
}
return ;
}
B
贪心
可以贪心删。如果行更长就先删行再删列,否则先删列再删行。
如果删不光就是无解。
好多人没有判删顺序,全部先删行,hack了四个,233
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int stH[mxn],top1=,stL[mxn],top2=;
int mp[][];
int n,m;
void getH(){
int i,j;
for(i=;i<=n;i++){
int tmp=0x3f3f3f3f;
for(j=;j<=m;j++){
tmp=min(tmp,mp[i][j]);
}
for(j=;j<=m;j++){
mp[i][j]-=tmp;
}
while(tmp){
stH[++top1]=i;tmp--;
}
}
return;
}
void getL(){
int i,j;
for(i=;i<=m;i++){
int tmp=0x3f3f3f3f;
for(j=;j<=n;j++){
tmp=min(tmp,mp[j][i]);
}
for(j=;j<=n;j++){
mp[j][i]-=tmp;
}
while(tmp){
stL[++top2]=i;tmp--;
}
}
return;
}
void check(){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mp[i][j]>){
printf("-1\n");
exit();
}
}
}
return;
}
int main(){
int i,j;
n=read();m=read();
for(i=;i<=n;i++){
for(j=;j<=m;j++){
mp[i][j]=read();
}
}
if(n<=m){
getH();getL();
}
else{
getL();getH();
}
check();
printf("%d\n",top1+top2);
while(top1){
printf("row %d\n",stH[top1--]);
}
while(top2){
printf("col %d\n",stL[top2--]);
}
return ;
}
C
数学问题 找规律 组合数
手列一个表看一下,可以发现神奇的规律。
倒数第二行肯定是$k_1*a_1+k_3*a_3+k_5*a_5+..$ 和 $ k_2*a_2 + k_4 * a_4 + k_6 * a_6+..$ 的形式。
k的值和二项式系数有关
如果n%4==2,答案是前者加后者,如果n%4==0,答案是前者减后者,如果n是奇数,就先算一行,把n变成偶数。
比赛的时候没做出来,时候补题因为阶乘没加LL,WA得飞起
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
using namespace std;
const int mxn=;
const int mod=1e9+;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n;
int a[mxn];
int fac[mxn],inv[mxn];
void init(){
fac[]=fac[]=inv[]=inv[]=;
for(int i=;i<mxn;i++){
fac[i]=(LL)fac[i-]*i%mod;
inv[i]=((-mod/i*(LL)inv[mod%i]%mod)+mod)%mod;
}
for(int i=;i<mxn;i++)
inv[i]=(LL)inv[i-]*inv[i]%mod;
return;
}
int C(int n,int m){
if(n<m)return ;
return (LL)fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main(){
int i,j;
init();
n=read();
for(i=;i<=n;i++)a[i]=read();
if(n<=){
printf("%d\n",(a[]+a[])%mod);return ;
}
if(n&){
for(i=;i<n;i++){
if(i&)a[i]=(a[i]+a[i+])%mod;
else a[i]=(a[i]-a[i+]+mod)%mod;
}
n--;
}
int tmp1=,tmp2=;
int ed=n>>;
for(i=;i<=ed;i++){
tmp1=((LL)tmp1+(LL)C(ed-,i-)*a[i*-])%mod;
tmp2=((LL)tmp2+(LL)C(ed-,i-)*a[i*])%mod;
}
// printf("%d %d\n",tmp1,tmp2);
if(n%==)tmp1=((LL)(tmp1-tmp2)%mod+mod)%mod;
else tmp1=((LL)tmp1+tmp2)%mod;
printf("%d\n",tmp1);
return ;
}
D
动态规划 树形DP
$f[u][j]$表示在u结点,子树中共选了j件物品,有打折商品的最小花费
$g[u][j]$表示在u结点,子树中共选了j件物品,没有打折商品的最小花费
转移的时候,f可以加g,g不能加f,分别计算一下就可以了。
不到一个小时的时候就写完了,自信提交发现TLE。
原因是DP的时候,先加上了子树size再O(n^2)转移。
↑然而这样复杂度并不是O(n^2)的,在链数据上会被卡得超慢
↑然而一直以为是常数大,尝试了各种优化,提交了一串,无限TLE
↑在最后十几分钟冷静下来思考,终于察觉到了问题,改成先转移再加子树size,在1:59压哨提交PP
↑真™刺激
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>
#define LL long long
using namespace std;
const int mxn=;
const int INF=0x3f3f3f3f;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*-''+ch;ch=getchar();}
return x*f;
}
struct edge{
int v,nxt;
}e[mxn<<];
int hd[mxn],mct=;
void add_edge(int u,int v){
e[++mct].v=v;e[mct].nxt=hd[u];hd[u]=mct;return;
}
int n,B;
int w[mxn],c[mxn],fa[mxn],sz[mxn];
int f[][];
int g[][];
vector<int>ve[];
int cmp(int a,int b){
return sz[a]<sz[b];
}
void DFS(int u){
f[u][]=g[u][]=;
f[u][]=w[u]-c[u];g[u][]=w[u];
sz[u]=;int tmp=;
for(int i=hd[u];i;i=e[i].nxt){
DFS(e[i].v);
ve[u].push_back(e[i].v);
tmp+=sz[e[i].v];
}
sort(ve[u].begin(),ve[u].end(),cmp);
for(register int i=;i<=tmp;i++)f[u][i]=g[u][i]=INF;
for(int i=;i<ve[u].size();i++){
int v=ve[u][i];
// sz[u]+=sz[v];
for(int j=sz[u];j>=;j--){
// int ed=min(sz[v],j);
if(j>){
for(int k=;k<=sz[v];k++){
if(f[v][k]>B && g[v][k]>B)break;
if(f[v][k]<=B)f[u][j+k]=min(f[u][j+k],f[u][j]+f[v][k]);
if(g[v][k]<=B)f[u][j+k]=min(f[u][j+k],f[u][j]+g[v][k]);
}
}
for(int k=;k<=sz[v];k++){
if(g[v][k]>B)break;
g[u][j+k]=min(g[u][j+k],g[u][j]+g[v][k]);
}
// ed=min(sz[v],j-1); }
sz[u]+=sz[v];
}
return;
}
int main(){
int i,j;
n=read();B=read();
for(i=;i<=n;i++){
w[i]=read();c[i]=read();
if(i>){
fa[i]=read();
add_edge(fa[i],i);
}
}
// memset(f,0x3f,sizeof f);
// memset(g,0x3f,sizeof g);
DFS();
int mx=;
for(i=;i<=n;i++){
if(f[][i]<=B || g[][i]<=B)mx=i;
else break;
}
printf("%d\n",mx);
/* for(i=1;i<=sz[1];i++){
printf("%d %d\n",f[1][i],g[1][i]);
}*/
return ;
}
Codeforces Round #419 (Div. 2) A-E的更多相关文章
- Codeforces Round #419 (Div. 2) E. Karen and Supermarket(树形dp)
http://codeforces.com/contest/816/problem/E 题意: 去超市买东西,共有m块钱,每件商品有优惠卷可用,前提是xi商品的优惠券被用.问最多能买多少件商品? 思路 ...
- Codeforces Round #419 (Div. 2) B. Karen and Coffee(经典前缀和)
http://codeforces.com/contest/816/problem/B To stay woke and attentive during classes, Karen needs s ...
- Codeforces Round #419 (Div. 2) A. Karen and Morning(模拟)
http://codeforces.com/contest/816/problem/A 题意: 给出一个时间,问最少过多少时间后是回文串. 思路: 模拟,先把小时的逆串计算出来: ① 如果逆串=分钟, ...
- Codeforces Round #419 (Div. 2)
1.题目A:Karen and Morning 题意: 给出hh:mm格式的时间,问至少经过多少分钟后,该时刻为回文字符串? 思路: 简单模拟,从当前时刻开始,如果hh的回文rh等于mm则停止累计.否 ...
- Codeforces Round #419 Div. 1
A:暴力枚举第一列加多少次,显然这样能确定一种方案. #include<iostream> #include<cstdio> #include<cmath> #in ...
- Codeforces Round #419 (Div. 2) ABC
python 2.7,用来熟悉Python 由于都是智障题,所以我也不讲述题意和题解,直接贴代码了-- A import sys h,m = map(int,raw_input().split(&qu ...
- Codeforces Round #419 (Div. 2) C. Karen and Game
C. Karen and Game time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...
- Codeforces Round #419 (Div. 2) B. Karen and Coffee
To stay woke and attentive during classes, Karen needs some coffee! Karen, a coffee aficionado, want ...
- Codeforces Round #419 (Div. 2)(B)差分数组
传送门:Problem B https://www.cnblogs.com/violet-acmer/p/9721160.html 题意: Karen有n个关于煮咖啡的食谱,每个食谱都有个煮咖啡的最适 ...
- Codeforces Round #419 (Div. 2) A B C 暴力 区间更新技巧 +前缀和 模拟
A. Karen and Morning time limit per test 2 seconds memory limit per test 512 megabytes input standar ...
随机推荐
- C++ Primer Plus学习:第九章
C++第九章:内存模型与名称空间 C++在内存中存储数据方面提供了多种选择.可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等. 单独编译 程序分为三个部分: ...
- PXE推一半失败,HP服务器、曙光服务器删除数据
一.#设备:惠普HP DL380 Gen9 PXE安装失败,系统尝试从硬盘启动 需要将安装未完整的系统数据删除,以便正常装机 从控制台重启设备 重启后,HP在此界面选择Intelligent Prov ...
- web移动端
h5:低版本(IE8及以下不支持H5标签,要引入html5shiv.js才能正常运行) 条件引入,只是针对PC端,移动端不存在这样的操作 <figure>:专门用来存放图片和相关介绍的 & ...
- 【ASP.NET 框架系列】您所经历的,但未必研究的那些技术
本篇文章更适合具有一定开发经验,一定功底,且对底层代码有所研究的朋友!!! 本篇文章稍微偏原理且底层,有一定难度和且比较晦涩,文章粒度稍微粗些,更细粒度的,会在后续的文章中,结合具体的Demo实 ...
- ZOJ2686_Cycle Gameu
题目的意思是给你一个多边形,每条边上有一个权值,你开始在第一个点.每次你必须经过一条有权值的边,并且把该边的权值减小到任意一个非负值,到达该边的另外一个点. 谁第一个无法操作就算输. 题意很简单,解法 ...
- BZOJ5073 小A的咒语(动态规划)
设f[i][j][0/1]为前i位选j段时其中第i位选/不选最多能匹配到哪,转移时f[i][j][0]→f[i+1][j][0],f[i][j][1]→f[i+1][j][0],f[i][j][1]→ ...
- Intel WIDI (Wireless Display) 相关技术知识分析
一. WIFI 1.如何查找WIFI设备 非p2p设备 Beacons 包(同步,SSID) 速率 1M/s 2.4G HZ 13个信道,1,6,11三个信道不重叠 2.P2P 认证 客户端在每个通道 ...
- Redis学习笔记一:Redis安装
Redis安装 1.下载进入redis官网下载redis-xxx.tar.gz包 2.将redis-xxx.tar.gz拷贝到Linux某一目录下并对其进行解压 tar -zxvf Redis-xxx ...
- 解题:USACO06DEC Milk Patterns
题面 初见SA 用了一个常见的按$height$分组的操作:二分答案,然后按$height$分组,遇到一个$height$小于$mid$的就丢进下一组并更新答案,如果最多的那组不少于$k$个说明可行 ...
- 【agc017E】Jigsaw
Portal -->agc017 Description 给你\(n\)块积木,每块积木由三个矩形组成,中间的矩形最高高度为\(h\),左边的矩形高度为\(a_i\)离底边高度为\(c_i\), ...