A.
k-Factorization

题意:将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;
}

B.
Odd sum

题意:给出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;
}

C.
Minimal string

对这题至今仍存在未解之谜。

题意:最开始给出一个串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;
}

如果有路过的大牛,请帮忙指点迷津。

E.
Array Queries

题意:给出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!的更多相关文章

  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

    A. k-Factorization 题目大意:给一个数n,求k个大于1的数,乘积为n.(n<=100,000,k<=20) 思路:分解质因数呗 #include<cstdio> ...

  3. Educational Codeforces Round 19 题解【ABCDE】

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

  4. 【Educational Codeforces Round 19】

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

  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. JMeter配置元件作用域

  2. MySQL查询优化方法总结

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  3. POJ 2923 Relocation(01背包+状态压缩)

    题意:有人要搬家,有两辆车可以运送,有若干家具,车有容量限制,而家具也有体积,那么如何运送会使得运送车次最少?规定两车必须一起走,两车一次来回只算1躺. 思路:家具怎么挑的问题,每趟车有两种可能:1带 ...

  4. MovieReview—A dog's purpose(一只狗的使命)

    Be Here Now                                                             A dog in the movie was reinc ...

  5. UVA 211 The Domino Effect 多米诺效应 (回溯)

    骨牌无非两种放法,横着或竖着放,每次检查最r,c最小的没访问过的点即可.如果不能放就回溯. 最外面加一层认为已经访问过的位置,方便判断. #include<bits/stdc++.h> ; ...

  6. targetcli save error

    iscsi configuration unable to save python error “ValueError: 'Implict and Explict' is not in list” / ...

  7. ValidForm验证表单

    在做项目时,要求熟悉项目中验证表单的插件,所以学习一下validForm这个插件 http://validform.rjboy.cn/document.html#validformObject

  8. EXC_BAD_ACCESS调试

    有时候,你会遇到由EXCBADACCESS造成崩溃. 这篇文件会告诉你什么是EXCBADACCESS,以及它产生的原因.我还会提供一些EXCBADACCESS错误的解决方案. 1. 什么是 EXCBA ...

  9. ios sinaweibo 客户端(一)

    上一篇sina微博Demo已经完成的认证,下面就开始进入微博相关内容的加载及显示.其实主要的工作就是调用微博API 加载相关的json数据,然后进行解析,然后在界面中进行组织好在tableview中进 ...

  10. Roman Numeral Converter-freecodecamp算法题目

    Roman Numeral Converter 1.要求 将给定的数字转换成罗马数字 所有返回的罗马数字都应该是大写形式 2.思路 分别定义个位.十位.百位.千位的对应罗马数字的数组 用Math.fl ...