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 ...
随机推荐
- 冲刺NO.12
Alpha冲刺第十二天 站立式会议 项目进展 项目核心功能,如学生基本信息管理模块,学生信用信息模块,奖惩事务管理模块等等都已完成,测试工作大体结束. 问题困难 项目结束后对项目的阶段性总结缺乏一定的 ...
- Basic FIFO Queue
Queue - 一种线程安全的FIFO实现 Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(threa ...
- js日常积累
1.数组转字符串 str.join(',') 2.字符串转数组 arr.split(',') 3.数组排序 function sorb(a,b){return a-b;}; arr.sort(sorb ...
- 顺企网 爬取16W数据保存到Mongodb
import requests from bs4 import BeautifulSoup import pymongo from multiprocessing.dummy import Pool ...
- 基于Unity·UGUI实现的RecycleList循环列表UI容器
在UI功能开发实践中,列表UI容器是我们经常使用一种UI容器组件.这种组件就根据输入的数据集合生成对应数据项目.从显示的方向来说,一般就分为水平排布和垂直排布的列表容器两种.列表容器为了在有限的界面空 ...
- python之路--day11---迭代器和生成器
迭代: 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 为什么要有迭代器: 数据类型的取值,字符串,列表,元组依靠索引可以取值,但是字典,集合,文件这些数据类型无法 ...
- LeetCode & Q35-Search Insert Position-Easy
Array Binary Search Description: Given a sorted array and a target value, return the index if the ta ...
- Python-面向对象(一)-Day7
Day7-面向对象基础 1一.isinstance(obj, cls) 1二.issubclass(sub, super) 1三.异常处理 11.异常基础 12.异常种类 23.异常其他结构 54.主 ...
- RESTful API 编写指南
基于一些不错的RESTful开发组件,可以快速的开发出不错的RESTful API,但如果不了解开发规范的.健壮的RESTful API的基本面,即便优秀的RESTful开发组件摆在面前,也无法很好的 ...
- JMeter入门(01)概念和样例
一.概念 JMeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台,实现了许多和互联网相关的网络测试组件,同时还保留着很强的扩展性. JMeter可以用来测试诸如:静态文件,Java Ser ...