Educational Codeforces Round 19 A+B+C+E!
题意:将n分解成k个大于1的数相乘的形式。如果无法分解输出-1。
思路:先打个素因子表,然后暴力判,注意最后跳出的条件。
int len,a[N],b[N];
void init()
{
memset(a,-1,sizeof(a));
a[0]=a[1]=0;
memset(b,0,sizeof(b));
len=0;
for(int i=2; i<N; i++)
if(a[i])
{
b[len++]=i;
if(N/i<i) continue;
for(int j=i*i; j<N; j+=i) a[j]=0;
}
}
int main()
{
init();
int n,k;
while(~scanf("%d%d",&n,&k))
{
if(k==1)
{
printf("%d\n",n);
continue;
}
if(a[n])
{
puts("-1");
continue;
}
int num=0,l=0;
int tmp[35];
while(k>1&&n>=b[num])
{
while(k>1&&n>=b[num]&&n%b[num]==0)
{
tmp[l++]=b[num];
// printf("%d ",b[num]);
k--;
n/=b[num];
}
num++;
}
if(k>1||n==1) puts("-1");
else
{
tmp[l++]=n;
for(int i=0;i<l;i++)
printf("%d ",tmp[i]);
puts("");
}
}
return 0;
}
题意:给出n个数,求最大的奇数和是多大。
思路:注意:偶数=奇数+奇数。先将所有大于0的数加起来,如果是奇数直接输出,否则需要减去一个正奇数或者负奇数。于是输入的时候需要求出一个最大的负奇数和一个最小的正奇数。
int len,a[N],b[N];
int main()
{
int n;
while(~scanf("%d",&n))
{
int mi=-INF,ma=INF,sum=0,x;
for(int i=0;i<n;i++)
{
scanf("%d",&x);
if(x>=0)
{
sum+=x;
if(x&1) ma=min(ma,x);
}
else
{
x=-x;
if(x&1) mi=max(mi,-x);
}
}
if((sum&1)==0)
{
int sum1=0,sum2=0;
// printf("%d %d\n",mi,ma);
sum1=sum-ma;
sum2=sum+mi;
sum=max(sum1,sum2);
}
printf("%d\n",sum);
}
return 0;
}
对这题至今仍存在未解之谜。
题意:最开始给出一个串s,和两个空串t,u。每次操作可以将s的首字符加入t的尾部,也可以将t的尾字符加入u的尾部。输出字典序最小的串u。
贪心思想,只要当前字符的后面有比当前小的先将当前字符入栈,如果后面没有比当前字符更小的则将栈顶比当前字符小的输出来,再输出当前字符。思想貌似很正确,然后第25组数据死活过不去。看了一下别人的代码,感觉没什么区别,只是实现方式不同,真是玄学。。
代码一:WA 20:
char s[N],b[N];
int main()
{
while(~scanf("%s",s))
{
int len=strlen(s);
b[len-1]=s[len-1];
for(int i=len-2; i>=0; i--) b[i]=min(s[i],b[i+1]);
b[len]='\0';
stack<char>q;
while(!q.empty()) q.pop();
for(int i=0; i<len; i++)
{
q.push(s[i]);
while(!q.empty()&&q.top()<=b[i])
{
printf("%c",q.top());
q.pop();
}
}
while(!q.empty())
{
printf("%c",q.top());
q.pop();
}
puts("");
}
return 0;
}
代码二:AC:
char s[N],b[N];
int main()
{
while(~scanf("%s",s))
{
int len=strlen(s);
b[len-1]=s[len-1];
for(int i=len-2; i>=0; i--) b[i]=min(s[i],b[i+1]);
b[len]='z';
stack<char>q;
while(!q.empty()) q.pop();
for(int i=0; i<len; i++)
{
q.push(s[i]);
while(!q.empty()&&q.top()<=b[i+1])//这里改成b[i+1]就过了
{
printf("%c",q.top());
q.pop();
}
}
while(!q.empty())
{
printf("%c",q.top());
q.pop();
}
puts("");
}
return 0;
}
代码三:WA 25:
char s[N],b[N];
int main()
{
while(~scanf("%s",s))
{
int len=strlen(s);
b[len-1]=s[len-1];
for(int i=len-2; i>=0; i--) b[i]=min(s[i],b[i+1]);
b[len]='z';
stack<char>q;
while(!q.empty()) q.pop();
for(int i=0; i<len; i++)
{
if(b[i]==s[i])//后面的没有比当前更小的;
{
while(!q.empty()&&q.top()<=b[i])
{
printf("%c",q.top());
q.pop();
}
printf("%c",s[i]);
}
else q.push(s[i]);
}
while(!q.empty())
{
printf("%c",q.top());
q.pop();
}
puts("");
}
return 0;
}
如果有路过的大牛,请帮忙指点迷津。
题意:给出n个数的数列a[](a[i]>=1&&a[i]<=n),然后q次查询,每次输入一个p,k,每次操作可以将p变换成p+a[p]+k。求需要变换多少次才能使p大于n。
思路:暴力。注意到数据只有1e5。用一个数组b[p][k]表示输出数据为p,k的时候需要变换的次数。但第一维可达1e5,所以第二维能开到300到400的样子,这样先预处理出k在400一下的,至于k在400以上的,我们发现,p的变换是递增的,k越大递增越快,所以如果k为400,最坏也就在260左右次就可以达到条件,这样暴力判就行。
int a[N],b[N][321];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]+=i;
memset(b,0,sizeof(b));
for(int i=n;i>=1;i--)
for(int j=1;j<=320;j++)
if(j+a[i]>n) b[i][j]=1;
else b[i][j]=b[a[i]+j][j]+1;
int q,p,k;
scanf("%d",&q);
while(q--)
{
scanf("%d%d",&p,&k);
if(k<=320)
{
printf("%d\n",b[p][k]);
continue;
}
int ans=0;
while(p<=n) p=a[p]+k,ans++;
printf("%d\n",ans);
}
}
return 0;
}
E题挺有意思,奥,为什么D题不做,嘿嘿,不(我)告(好)诉(菜)你(a)。
Educational Codeforces Round 19 A+B+C+E!的更多相关文章
- 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
A. k-Factorization 题目大意:给一个数n,求k个大于1的数,乘积为n.(n<=100,000,k<=20) 思路:分解质因数呗 #include<cstdio> ...
- 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 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 ...
随机推荐
- Python3+Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)'''from seleni ...
- COGS 2104. [NOIP2015]神奇的幻方
★ 输入文件:2015magic.in 输出文件:2015magic.out 简单对比时间限制:1 s 内存限制:256 MB 模拟 一开始数组开小了.. 屠龙宝刀点击就送 #incl ...
- 洛谷 P3387 【模板】缩点
题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...
- 【Python图像特征的音乐序列生成】深度卷积网络,以及网络核心
这个项目主要涉及到两个网络,其中卷积神经网络用来提取图片表达的情绪,提取出一个二维向量. 网络结构如图: 词向量采用预训练的glove模型,d=50,其他信息包括了图片的“空旷程度”.亮度.对比度等信 ...
- 基于Activiti5.15.1 自定义用户、组(User,Group)实现
基于Activiti5.15.1 自定义用户.组(User,Group)实现 本人刚接触Activiti,最近工作中需要将Activiti中原有的用户,组(ACT_ID_USER,ACT_ID_GRO ...
- UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数. 如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈.很明显 ...
- Ubuntu18.04偏好设置
以下只是我个人的一些偏好设置,会持续更新 一.安装中文输入法和换用中文界面 Ubuntu18.04下安装搜狗输入法 Ubuntu18.04如何从英文界面更改为中文界面 二.更改系统自带设置 1.设置- ...
- 常用的ement语法
缩写语法: 介绍:Emmet 使用类似于 CSS 选择器的语法描述元素在生成的文档树中的位置及其属性. 声明:第一次写博客大家多多关照,如有错误或者需要补充的请到评论里留言,谢谢大家! 快速生成htm ...
- c++ 函数指针应用,定义一个方法,传入两个参数和一个函数指针,并返回结果
#include <iostream> #include <string> using namespace std; double add(double x, double y ...
- Java--equals和 == 的比较和equals()、HashCode()的重写
一. equals和 == 的比较 1.== 运算符 ① == 如果比较的是基本数据类型,则比较的是值. ② == 如果比较的是引用数据类型,则比较的是地址值. 2.equals ①它属于java.l ...