Educational Codeforces Round 19
A. k-Factorization
题目大意:给一个数n,求k个大于1的数,乘积为n。(n<=100,000,k<=20)
思路:分解质因数呗
#include<cstdio>
#define MN 100000
int a[MN+],an;
int main()
{
int n,k,i;
scanf("%d%d",&n,&k);
for(i=;k>&&n>;++i)for(;k>&&n%i==;--k,n/=i)a[++an]=i;
if(n==)return *puts("-1");
for(i=;i<=an;++i)printf("%d ",a[i]);printf("%d",n);
}
B. Odd sum
题目大意:给你n个数,求和为奇数的子序列的最大和。(n<=10^5)
思路:大于0的偶数直接加入答案,把奇数排序,先选一个最大的把它删掉并加入答案,while剩下的最大的的两个奇数和大于0就加入答案并删掉。
#include<cstdio>
#include<algorithm>
using namespace std;
char B[<<],*S=B,C;int X,F;
inline int read()
{
for(F=;(C=*S++)<''||C>'';)if(C=='-')F=-;
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X*F;
}
#define MN 100000
int a[MN+],an;
int main()
{
fread(B,,<<,stdin);
int n=read(),i,x,ans=;
for(i=;i<=n;++i)
if((x=read())&)a[++an]=x;
else if(x>)ans+=x;
sort(a+,a+an+);
ans+=a[an];
for(i=an;--i>;--i)if(a[i]+a[i-]>)ans+=a[i]+a[i-];else break;
printf("%d",ans);
}
C. Minimal string
题目大意:给出一个序列的入栈顺序,求字典序最小的可能的出栈顺序。(序列长度<=10^5)
思路:堆+双向链表贪心,选了一个元素后之后只能选这个元素的前一个元素和后面的元素,每次选能选的最小且位置最前的。
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define MN 100000
char s[MN+];
int ls[MN+],nx[MN+],u[MN+];
struct node
{
char c;int x;
bool operator<(const node&b)const{return c==b.c?x>b.x:c>b.c;}
};
priority_queue<node> pq;
int main()
{
int n,i,l,x;
scanf("%s",s+);n=strlen(s+);
for(i=;i<=n;++i)ls[i]=i-,nx[i]=i+,pq.push((node){s[i],i});
for(i=l=;i<=n;++i)
{
while((x=pq.top().x)<l||u[x])pq.pop();
u[x]=;putchar(pq.top().c);pq.pop();
if(ls[x]<l&&ls[x])pq.push((node){s[ls[x]],ls[x]});
l=ls[x];nx[ls[x]]=nx[x];ls[nx[x]]=ls[x];
}
}
D. Broken BST
题目大意:给出一棵n个节点的树,每一个点有一个权值,对每个点的权值从根节点开始按二叉搜索树的方式查询,问有多少个点的权值不会被查到。(n<=10^5)
思路:dfs求出会走到每个节点的数字区间。
#include<cstdio>
#include<map>
using namespace std;
char B[<<],*S=B,C;int X,F;
inline int read()
{
for(F=;(C=*S++)<''||C>'';)if(C=='-')F=-;
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X*F;
}
#define MN 100000
#define MX 1000000000
int v[MN+],l[MN+],r[MN+],d[MN+];
map<int,int> mp;
void dfs(int x,int L,int R)
{
if(x<)return;
if(L<=v[x]&&v[x]<=R)mp[v[x]]=;
if(L<v[x])dfs(l[x],L,min(R,v[x]-));
if(R>v[x])dfs(r[x],max(L,v[x]+),R);
}
int main()
{
fread(B,,<<,stdin);
int n=read(),i,ans=;
for(i=;i<=n;++i)v[i]=read(),
(l[i]=read())>?++d[l[i]]:,
(r[i]=read())>?++d[r[i]]:;
for(i=;i<=n;++i)if(!d[i])dfs(i,,MX);
for(i=;i<=n;++i)if(!mp[v[i]])++ans;
printf("%d",ans);
}
E. Array Queries
题目大意:给出n和ai(1<=i<=n),一次变换定义为把p变成p+a[p]+k,q次询问,每次给出p和k,问要多少次能把p变成大于n的数。(n,q<=10^5)
思路:分块,对于k<=n^0.5直接预处理出各个p和k的答案,对于k>n^0.5答案最大不会超过n^0.5,直接暴力,复杂度O(n^1.5)。
#include<cstdio>
inline int read()
{
int x;char c;
while((c=getchar())<''||c>'');
for(x=c-'';(c=getchar())>=''&&c<='';)x=(x<<)+(x<<)+c-'';
return x;
}
#define MN 100000
#define MK 350
int a[MN+],f[MK+][MN+];
int main()
{
int n=read(),q,i,k,ans;
for(i=;i<=n;++i)a[i]=read();
for(k=;k<=MK;++k)for(i=n;i;--i)f[k][i]=i+a[i]+k>n?:f[k][i+a[i]+k]+;
for(q=read();q--;)
{
i=read();k=read();
if(k<=MK)printf("%d\n",f[k][i]);
else{for(ans=;i<=n;i+=a[i]+k)++ans;printf("%d\n",ans);}
}
}
F. Mice and Holes
题目大意:n只老鼠m个洞分别位于数轴上,每个洞有容量ci,求每个老鼠都进洞的最小距离和。(n,m<=5,000)
思路:把老鼠和洞分别排序,最优方案下进每个洞的老鼠必然是连续的区间,f[i][j]表示前i个洞进前j只老鼠的最小距离和,s[i][j]表示前j只老鼠都进第i个洞的距离和,f[i][j]=min(f[i-1][k]+s[i][j]-s[i][k])(j-k<=ci),单调队列维护即可,复杂度O(nm)。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define MN 5000
struct hole{int p,c;}h[MN+];
bool cmp(hole a,hole b){return a.p<b.p;}
int x[MN+],q[MN+],ql,qr;
ll f[MN+][MN+],s[MN+];
inline int z(int x){return x<?-x:x;}
int main()
{
int n,m,i,j;ll cnt=;
scanf("%d%d",&n,&m);
for(i=;i<=n;++i)scanf("%d",&x[i]);
for(i=;i<=m;++i)scanf("%d%d",&h[i].p,&h[i].c),cnt+=h[i].c;
if(cnt<n)return *puts("-1");
sort(x+,x+n+);sort(h+,h+m+,cmp);
memset(f,,sizeof(f));f[][]=;
for(i=;i<=m;++i)for(q[ql=,qr=]=j=;j<=n;++j)
{
s[j]=s[j-]+z(h[i].p-x[j]);
while(ql<=qr&&f[i-][j]-s[j]<=f[i-][q[qr]]-s[q[qr]])--qr;q[++qr]=j;
while(j-q[ql]>h[i].c)++ql;
f[i][j]=f[i-][q[ql]]+s[j]-s[q[ql]];
}
printf("%I64d",f[m][n]);
}
Educational Codeforces Round 19的更多相关文章
- Educational Codeforces Round 19 A, B, C, E(xjb)
题目链接:http://codeforces.com/contest/797 A题 题意:给出两个数n, k,问能不能将n分解成k个因子相乘的形式,不能输出-1,能则输出其因子: 思路:将n质因分解, ...
- Educational Codeforces Round 19 题解【ABCDE】
A. k-Factorization 题意:给你一个n,问你这个数能否分割成k个大于1的数的乘积. 题解:因为n的取值范围很小,所以感觉dfs应该不会有很多种可能-- #include<bits ...
- 【Educational Codeforces Round 19】
这场edu蛮简单的…… 连道数据结构题都没有…… A.随便质因数分解凑一下即可. #include<bits/stdc++.h> #define N 100005 using namesp ...
- Educational Codeforces Round 19 A+B+C+E!
A. k-Factorization 题意:将n分解成k个大于1的数相乘的形式.如果无法分解输出-1. 思路:先打个素因子表,然后暴力判,注意最后跳出的条件. int len,a[N],b[N]; v ...
- Educational Codeforces Round 19 C
Description Petya recieved a gift of a string s with length up to 105 characters for his birthday. H ...
- Educational Codeforces Round 19 B
Description You are given sequence a1, a2, ..., an of integer numbers of length n. Your task is to f ...
- Educational Codeforces Round 19 A
Description Given a positive integer n, find k integers (not necessary distinct) such that all these ...
- Educational Codeforces Round 19 E. Array Queries(暴力)(DP)
传送门 题意 给出n个数,q个询问,每个询问有两个数p,k,询问p+k+a[p]操作几次后超过n 分析 分块处理,在k<sqrt(n)时,用dp,大于sqrt(n)用暴力 trick 代码 #i ...
- Educational Codeforces Round 17
Educational Codeforces Round 17 A. k-th divisor 水题,把所有因子找出来排序然后找第\(k\)大 view code //#pragma GCC opti ...
随机推荐
- 一个C&C++程序的生命历程
翻了好多博客,内容星星点点,没找到我想要的,现在吸取大神精华,加上本人拙见,总结如下: 一个C或C++程序从你开始编写,到结束,整个过程,都做了些什么,请看下文: 先看大体的过程:看图: 我在这里主要 ...
- map的infowindow的show事件(ArcGIS API for JS)
- JAVA_SE基础——58.如何用jar命令对java工程进行打包
有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包java应用程序,下面对jar命令进行介绍, ...
- 算法题丨3Sum
描述 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...
- react-native-image-picker 运用launchCamera直接调取摄像头的缺陷及修复
在前几天用react-native进行android版本开发当中,用到了"react-native-image-picker"的插件:根据业务的需求:点击按钮-->直接调取摄 ...
- HTTP协议扫盲(四)HTTP协议进阶 - MIME类型
一.概念和原理 1.什么是MIME类型? MIME类型,即多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器. 服务器会将它们发送的多媒体数据的类型告诉 ...
- Mac 中配置Apache
使用的mac版本是10.10.1,mac自带的Apache环境 分为两部分: 1.启动Apache 2.设置虚拟主机 启动Apache 打开终端, >>sudo apachectl -v, ...
- HTML5示例之WebSocket
Web应用程序通常有一些耗时的操作,但有些操作耗时不是很长,一分钟之内能完成.如果采用后台任务队列去异步处理,这样的用户不能实时看到后台处理的情况.倘若用户触发操作后,Web页面能够实时看到后台处理的 ...
- [转]scrapy中的request.meta
作者:知乎用户链接:https://www.zhihu.com/question/54773510/answer/146971644 meta属性是字典,字典格式即{'key':'value'},字典 ...
- js实现继承的5种方式
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...