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 ...
随机推荐
- 个人作业2:QQ音乐APP案例分析
APP案例分析 QQ音乐 选择理由:毕竟作为QQ音乐九年的资深老用户以及音乐爱好者 第一部分 调研 1.第一次上手的体验 我算是很早期的QQ音乐的用户,用QQ音乐七八年,除了体验各方面还不错之外 ...
- choose the max from numbers, use scanf and if else (v1:21.9.2017,v2:23.9.2017)
#include<stdio.h> int main(){ int a,b,c,max; printf("请输入一个数值: "); scanf("%d&quo ...
- android 广播,manifest.xml注册,代码编写
1.种 private void downloadBr(File file) { // 广播出去,由广播接收器来处理下载完成的文件 Intent sendIntent = new Intent ...
- 201421123042 《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至 ...
- Flask Markup 上下文,request
在模板渲染中,使用Markup转换变量中的特殊字符 from flask import Markup Markup函数对字符串进行转移处理再传递给render_template()函数 在浏览器中显示 ...
- DML数据操作语言之复杂查询
1.视图(View) 我们知道,在关系型数据库中,用来保存实际数据记录的是数据表.和表同等概念也是用来保存东西是:视图. 但是数据表是用来保存实际数据记录的,而视图是用来保存常用select语句的. ...
- Linq GroupBy
//Linq //var result = from p in personList // group p by p.Id // into grouped // select new { Id = g ...
- Python-socket网络编程-Day8
目录Day8-Python socket 11.Socket 11.1.socket和file的区别: 11.2.WEB服务应用: 21.3.更多功能 21.4.socket方法: 41.5. 服务端 ...
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like '%逸%'' at line 1
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...
- solr云的简单搭建(了解)
1.认识系统架构 1.1.集群概述 1.1.1.单点服务器的问题 我们之所以要学习集群,是因为单点服务器,存在一系列的问题. 我们以前学习的JavaEE项目,都是部署在一台Tomcat上,所有的请求, ...