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的更多相关文章

  1. Educational Codeforces Round 19 A, B, C, E(xjb)

    题目链接:http://codeforces.com/contest/797 A题 题意:给出两个数n, k,问能不能将n分解成k个因子相乘的形式,不能输出-1,能则输出其因子: 思路:将n质因分解, ...

  2. Educational Codeforces Round 19 题解【ABCDE】

    A. k-Factorization 题意:给你一个n,问你这个数能否分割成k个大于1的数的乘积. 题解:因为n的取值范围很小,所以感觉dfs应该不会有很多种可能-- #include<bits ...

  3. 【Educational Codeforces Round 19】

    这场edu蛮简单的…… 连道数据结构题都没有…… A.随便质因数分解凑一下即可. #include<bits/stdc++.h> #define N 100005 using namesp ...

  4. Educational Codeforces Round 19 A+B+C+E!

    A. k-Factorization 题意:将n分解成k个大于1的数相乘的形式.如果无法分解输出-1. 思路:先打个素因子表,然后暴力判,注意最后跳出的条件. int len,a[N],b[N]; v ...

  5. Educational Codeforces Round 19 C

    Description Petya recieved a gift of a string s with length up to 105 characters for his birthday. H ...

  6. Educational Codeforces Round 19 B

    Description You are given sequence a1, a2, ..., an of integer numbers of length n. Your task is to f ...

  7. Educational Codeforces Round 19 A

    Description Given a positive integer n, find k integers (not necessary distinct) such that all these ...

  8. 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 ...

  9. Educational Codeforces Round 17

    Educational Codeforces Round 17 A. k-th divisor 水题,把所有因子找出来排序然后找第\(k\)大 view code //#pragma GCC opti ...

随机推荐

  1. 团队作业6——展示博客(Alpha版本)

    Deadline: 2017-12-3  23:00PM,以博客发表日期为准   评分基准 按时交 - 有分,检查的项目包括后文的两个方面 团队成员介绍 Alpha阶段进展 团队合作,各成员分工 Be ...

  2. 2018上c语言第0次作业

    随笔: 1.翻阅邹欣老师博客关于师生关系博客,并回答下列问题,每个问题的答案不少于500字: (1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 答:对此问题 ...

  3. Angular-ui-router+ocLazyLoad.js应用实例

    AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Goole所收购.是一款优秀的前端JS框架.AngularJS有着诸多特性,最为核心的是:MVC,撗块化,自动化双向数据绑 ...

  4. 09-移动端开发教程-Sass入门

    1. 引言 CSS3之前的CSS都大都是枚举属性样式,而编程语言强大的变量.函数.循环.分支等功能基本都不能在CSS中使用,让CSS的编程黯淡无光,Sass就是一种增强CSS编程的扩展语言(CSS4也 ...

  5. vue jquery js 获取当前时间本周的第一天 和 本月的第一天

    交互的时候传输数据 后台要求这样的数据 直接上代码 这是我找度姨要的  附上链接  https://www.cnblogs.com/wasabii/p/7756560.html 它里面有本季度第一天  ...

  6. JAVA_SE基础——3.Java程序的开发流程

    上一篇,写的是JAVA的环境变量的配置,今天我抽空写篇Java程序的开发流程,下面的教程是我结合书本和毕向东老师的视频写下的心的~ 在没有真正写Java程序前,首先需要了解Java程序的开发过程. S ...

  7. Microsoft Soft SQL Server 大数据----分区表性能测试

    分区表 MSSQL有一个大数据储存方案,可以提高效率那就是分区表. 使用起来跟普通表没有区别.至于具体原理自己度娘吧. 真正性能的提高,是依赖于硬件的加入.也是就说,当把一个表设置成分区表,每一个分区 ...

  8. 解决忽略VScode中Python插件pylint报错的问题

    pylint是VScode中python自带的插件,可以帮助代码规范,美观. 但是有些报错是你不想看到的,你可以选择性的忽略. 例如,在re.compile()中,可以添加参数re.S使. 匹配任意字 ...

  9. 点开GitHub之后,瑟瑟发抖...的我

    我说句实在话啊,GitHub这个网址真的很能勾起人学习的欲望,一进入GitHub的注册页面真的让我这个英语学渣瑟瑟发抖,瞬间立下个flag:好好学习英语..... 我对python的求知欲怎么能被英语 ...

  10. Python内置函数(50)——issubclass

     英文文档: issubclass(class, classinfo) Return true if class is a subclass (direct, indirect or virtual) ...