2019CCPC女生赛
C - Function HDU - 6546
由于a大于0,所有二次函数均是开口向上,而且x必须正整数。所以很自然想到先全部分配1.
然后逐个分配,由于二次函数f[i]-f[i-1]左边一定比右边更优,即i越小结果越小。
所以我们可以直接把F[I]-F[I-1]丢到优先队列里。每次让某一个二次函数的x+1,根据前面的分析,一定是队列首的二次函数加1 更优,因为队列里的所有数,将来只可能更大,不会变小。
然后把F[I+1]-F[I]丢回去即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e5+7;
struct node
{ll f,x,id;bool operator <(const node &r)const{return f>r.f;}
}p;
priority_queue<node>q;//逆序规则,变成小根堆
int a[M],b[M],c[M];
ll s(int k,int x)
{return 1LL*a[k]*x*x+1LL*b[k]*x+c[k];
}
int main()
{int n,m;cin>>n>>m;ll ans=0;for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i],ans+=s(i,1),q.push(node{s(i,2)-s(i,1),2,i});m-=n;while(m){node tp=q.top();q.pop();ans+=tp.f;q.push(node{s(tp.id,tp.x+1)-s(tp.id,tp.x),tp.x+1,tp.id});m--;}cout<<ans<<endl;return 0;
}
D - Tree
HDU - 6547
如果不在树上,这就是一道势能线段树的裸题。
在树上的话,树剖一下就行了。
两个知识点的混合板子题
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls o*2
#define rs o*2+1
const int maxn=2e5+7;
ll w[maxn],wt[maxn];
struct node
{int v,nxt;
}e[maxn];
int tot,head[maxn];
void add(int x,int y)
{e[++tot].nxt=head[x];e[tot].v=y;head[x]=tot;
}
int son[maxn],id[maxn],fa[maxn],cnt,dep[maxn],siz[maxn],top[maxn];
int n,m,r,q;
void init()
{tot=0,cnt=0;
}
ll tr[maxn<<2],tg[maxn<<2];
void bd(int o,int l,int r)
{if(l==r){tr[o]=wt[l];if(tg[o]==1||tg[o]==0)tg[o]=1;return;}int m=(l+r)/2;bd(ls,l,m);bd(rs,m+1,r);tr[o]=tr[ls]+tr[rs];
}
void up(int o,int l,int r,int x,int y)
{if(l==r){tr[o]=sqrt(1.0*tr[o]);if(tr[o]==1||tr[o]==0)tg[o]=1;return ;}int m=(l+r)/2;if(x<=m)up(ls,l,m,x,y);if(y>m)up(rs,m+1,r,x,y);tr[o]=tr[ls]+tr[rs];if(tg[ls]&&tg[rs])tg[o]=1;
}
ll qu(int o,int l,int r,int x,int y)
{if(x<=l&&r<=y){return tr[o];}int m=(l+r)/2;ll ans=0;if(x<=m)ans+=qu(ls,l,m,x,y);if(y>m)ans+=qu(rs,m+1,r,x,y);return ans;
}
//
void dfs1(int u,int f,int deep)
{dep[u]=deep;fa[u]=f;siz[u]=1;int maxson=-1;for(int i=head[u];i;i=e[i].nxt){int v=e[i].v;if(v==f)continue;dfs1(v,u,deep+1);siz[u]+=siz[v];if(siz[v]>maxson){son[u]=v;maxson=siz[v];}}
}
void dfs2(int u,int topf)
{id[u]=++cnt;wt[cnt]=w[u];top[u]=topf;if(!son[u])return ;dfs2(son[u],topf);for(int i=head[u];i;i=e[i].nxt){int v=e[i].v;if(v==fa[u]||v==son[u])continue;dfs2(v,v);}
}
void updrange(int x,int y)
{while(top[x]!=top[y]){if(dep[x]<dep[y])swap(x,y);up(1,1,n,id[top[x]],id[x]);x=fa[top[x]];}if(dep[x]>dep[y])swap(x,y);up(1,1,n,id[x],id[y]);
}
ll qrange(int x,int y)
{ll ans=0;while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]])swap(x,y);ans+=qu(1,1,n,id[top[x]],id[x]);x=fa[top[x]];}if(dep[x]>dep[y])swap(x,y);ans+=qu(1,1,n,id[x],id[y]);return ans;
}
int main()
{int u,v;init();cin>>n>>q;for(int i=1;i<=n;i++)scanf("%d",&w[i]);for(int i=1;i<=n-1;i++)scanf("%d%d",&u,&v),add(u,v),add(v,u);r=1;dfs1(r,-1,1);dfs2(r,r);bd(1,1,n);for(int i=1;i<=q;i++){int opt,u,v,z;scanf("%d%d%d",&opt,&u,&v);if(opt==0){updrange(u,v);}else{printf("%lld\n",qrange(u,v));}}
}
F - String
HDU - 6549
f[i][j][k]表示: 处理到第i位,使当前位修改为 'a'+j ,且已经出现了k段的最小修改次数。
由于无后效性,我们直接线性DP从前往后推。
比较简单,难点是会自然想到26^2*10*n的做法。
我们让f[i][26][k]表示: 处理到第i位,使当前位修改为任意字符 ,且已经出现了k段的最小修改次数。
这样就能利用前面已经处理过的信息了 省去一维枚举字符。
转移比较简单,看看就差不多了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//typedef __int128 LL;
//typedef unsigned long long ull;
//#define F first
//#define S second
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ld,ld> pdd;
const ld PI=acos(-1);
const ld eps=1e-9;
//unordered_map<int,int>mp;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
//#define a(i,j) a[(i)*(m+2)+(j)] //m是矩阵的列数
//pop_back()
const int seed=131;
const int M = 2e5+7;
/*int head[M],cnt;
struct EDGE{int to,nxt,val;}ee[M];
void add(int x,int y,int z){ee[++cnt].nxt=head[x],ee[cnt].to=y,ee[cnt].val=z,head[x]=cnt;}*/
int f[M][27][11];
char s[M];
int main()
{ios::sync_with_stdio(false);cin.tie(0);int n,l,z;cin>>n>>l>>z;cin>>s;memset(f,127,sizeof(f));for(int i=0;i<=25;i++)f[0][i][1]=(s[0]=='a'+i?0:1);f[0][26][1]=0;for(int i=1;i<n;i++){for(int j=0;j<25;j++){for(int k=1;k<=z;k++){if(s[i]=='a'+j)f[i][j][k]=f[i-1][j][k];if(i-l>0){f[i][j][k]=min(f[i][j][k],f[i-l][26][k-1]+1);f[i][j][k]=min(f[i][j][k],f[i-l][j][k]+1);}else{f[i][j][k]=min(f[i][j][k],f[0][26][k-1]+1);f[i][j][k]=min(f[i][j][k],f[0][j][k]+1);}// cout<<i<<" "<<j<<" "<<k<<" "<<f[i][j][k]<<endl;f[i][26][k]=min(f[i][26][k],f[i][j][k]);}}} cout<<f[n-1][26][z]<<endl;return 0;
}
2019CCPC女生赛相关推荐
- 2019CCPC女生赛总结
赛后感言 这大概真的是我最后一场ACM现场赛了吧,每一次参加现场赛后都是难过和遗憾-(文末附上照片) 前几天刚毕业答辩结束,明天就要上班了.昨天来到南京参加CCPC女生赛,今天上午8:30-9:30热 ...
- 2019CCPC江苏南京女生赛 | 总结
今年的女生专场在江苏南京晓庄学院举办 (夸一波 主办方周老师好可爱~~ 桌牌设计的很好看 志愿者小姐姐也很热心~ 第一次见到了wls.谈姐姐等巨巨 很难得在开头放队友友链 因为这一篇说的实在是太废话了 ...
- 武汉工程大学第一届程序设计女生赛(牛客contest 4746)解题报告 Apare_xzc
武汉工程大学第一届程序设计女生赛解题报告 xzc 2020.3.8 比赛链接:武汉工程大学第一届程序设计女生赛 A. Multiplication (101/861) 分析: 问x平方几次后就会> ...
- 2022CCPC女生赛 | 总结
目录 1.做题情况 2.一些感想 1.做题情况 我们队A了三道题,罚时比较长,应该是吊在铜尾这个位置 2.一些感想 这次比赛真的慌慌张张,从最开始的队友电脑登不进去,到我的电脑(唯一一台能打代码的电脑 ...
- 2021CCPC女生赛
2021CCPC女生赛 距离女生赛过去已经一个月了,竟然没有补题和整理过.每天要看论文做实验还要准备一个又一个的考试,时间总是不够用的,状态还是依然的差. 现场大概5题银首到铜尾了. 金牌的话要做出更 ...
- 2021ccpc女生赛 BCF题解
2021ccpc女生赛 C (状压DP) 题意:给定一张图,每个节点隶属于一个公司,会有节点属于相同的公司,节点都有一个权值,问从节点1出发,到达第iii个点时能得到的最大价值是多少. 每个公司的红包 ...
- 2019 CCPC 女生赛
题目链接 Rank:67 / 297 (不过榜单好像不是现场的榜单) 这次韩巍有课没来,我和程磊两个人做的,这次做的是女生赛,沃老师出的题,题面都是中文题,比较友好,题目都比较简单,都是思维题,一共 ...
- 2017 女生赛总结
第一次参加女生赛的时候还是个20天速成萌新,拼拼凑凑组了一支队去杭电参赛.只做了2道题,惨列倒数第五名-- 一年过去,加入了ACM俱乐部,被俱乐部里的大佬们虐了一年以后重新参加这个比赛. 拿了铜牌,虽 ...
- 第二届CCPC女生赛 粗略题解(要做重现的不要看哦)
因为再不全力投入华为软件精英挑战赛就来不及了! 而且直播时讲过题了,所以只能粗略写一个题解,希望大家包涵>.< 基本可以参考代码,可以画图模拟加思考脑补其原理与过程23333~~ 会后续有 ...
最新文章
- nvGRAPH原理概述
- NSArray、NSDictionary、NSString存储、删改、遍历
- 自动化日志收集及分析在支付宝 App 内的演进
- C++基础与深度解析第七章:深入IO
- windows-7:系统利用终端cmd命令关机
- 畅谈云原生(上):云原生应用应该是什么样子?
- java 数字 下划线_数字文字中的下划线– Java 7功能
- 论文中的误差图绘制(图中图)
- 百度直达号选错了对手 阿里腾讯还太嫩 干掉美团更直接
- 定义c++对象(c++可以完成面向对象编程)(正方体的实例应用);
- 教程 | 如何用思维导图做自我介绍
- CVPR 2021 目标检测论文大盘点(65篇论文)
- 基于阿里云CentOS进行Docker尝试
- 如何给PDF文件添加水印?PDF免费添加水印教程来了
- 简单有效解决onenote无法设置或修改默认的英文字体“Calibri”(简单实用)
- em算法 图像模糊检测_基于EM算法的眼底OCT图像反卷积去模糊技术
- 2021 ICCV论文分享 | 遮挡边界检测
- TVbox带会员带推广版本
- GCN变体-graphSAGE
- css如何在下拉框添加倒三角,CSS给选中元素增加倒三角形(示例代码)
热门文章
- 英语知识点整理day08-谚语学习(A字母开头)
- 如何在Google Chrome浏览器中更改主页
- c语言程序设计 链表,c语言程序设计基于链表的学生成绩管理系统.doc
- Windows 7 Ultimate with SP1(x64) MSDN 官方简体中文旗舰版原版
- ASCII Art@字符画LOGO字符生成@Font Generator
- Prometheus 踩坑集锦
- 平面设计和ui设计的区别:ui设计前景怎样
- php防止伪造数据,PHP_php防止伪造的数据从URL提交方法,针对伪造的数据从URL提交的情 - phpStudy...
- BZOJ 4657: tower【路径最小割约束】
- 大星星学物联网概览篇-移动通信网络WWAN