Codeforces Round #289


A


Maximum in Table


B


Painting Pebbles


C


Sums of Digits


D


Restoring Numbers


E


Pretty Song


F


Progress Monitoring

总结

1. B题一开始有些马虎,没有读完题就开始做,结果理解错题意WA了一次(样例居然还是一次就过的…)。以后要把题目读完再开始做。这种做法虽然在读题上花费的时间多了,但却节省了更多的做题时间,所以我认为这是很有必要的。

题解

A. Maximum in Table

i=1 或者 j=1, a[i][j]=1; 否则,a[i][j]=a[i-1][j]+a[i][j-1]。

求a数组中最大的数。

很明显,答案就是组合数C[n][n].

B. Painting Pebbles

有n堆石头,第i里有a[i]个石头。现在要你把石头染色。

一共有k个颜色。要求对于某个特定颜色c,它在任意两堆的数目差不能超过1。

求可行方案。

简单题。

这题我的想法是对于每堆石头,都从1开始染,染到k之后又从1开始染。有了这个想法之后就可以发现,要满足要求,则max{a[i]}-min{a[i]}必须小于等于k。有了这个想法之后,就可以开始写代码了。

D. Restoring Numbers

C[i][j]=(a[i]+b[j])%k.

现在给你一个W数组,让你判断W是否可以是一个C数组。如果可以,请输出可行解。

第i行与第i-1行相减后就可以得到a[i]-a[i-1]的两个值,这两个值相差k。利用这一点就可以求到k。若是相减后得到超过两个值,那么W就不是C数组,输出”NO”即可。若是只能得到一个值,那么就让k=0x7fffffff就行了。

列的操作与行类似。

最后,我们还需要判断k是否是大于W数组中的元素。如果小于其中任何一个,那么W就不是C数组。

输出的时候,只需要令a[1]=0,b[i]=w[1][i],然后推出a[i](i>=2)就行了。

E. Pretty Song

求s中的元音在所有子串中出现的期望。

这道题难处理的就是分母。

刚开始想固定分母,枚举所有元音。苦思良久,也没想到应该怎么优化。

然后想固定元音,枚举长度,但是分母不好处理。后来发现,随着长度的增加,子串的个数先是线性增加(y=x),然后是保持不变(y=min(i,|s|-i+1)),最后是线性递减(y=-x+len+1)。把这三个函数除以x之后就变成y=1, y=min(i,|s|-i+1)/x, y=-1+(len+1)/x。y=1很好处理,而后面两个函数的分子都是常数,所以想到预处理出1+1/2+1/3+……+1/i的值来计算后面两个函数值的和。

时间: 2024-12-28 08:36:23

Codeforces Round #289的相关文章

Codeforces Round #289 Div2 E

Problem 给一串长度为N的字符串,对于每个字符,若字符为元音,则权值为1,否则为0.一个子串的权值定义为该串所有字符权值之和除以字符个数,一个母串的权值定义为所有子串的权值之和.求母串的权值. Limits Time Limit(ms): 1000 Memory Limit(MB): 256 N: [1, 5*10^5] 字符集: 'A'-'Z' 元音: I E A O U Y Solution 考虑每个元音字符对母串的贡献,可以找出规律. More 举"ABCDOEFGHKMN"

codeforces水题100道 第十八题 Codeforces Round #289 (Div. 2, ACM ICPC Rules) A. Maximum in Table (brute force)

题目链接:http://www.codeforces.com/problemset/problem/509/A题意:f[i][1]=f[1][i]=1,f[i][j]=f[i-1][j]+f[i][j-1],求f[n][n].C++代码: #include <iostream> using namespace std; int n, f[11][11]; int main() { cin >> n; for (int i=1;i<=n;i++) f[i][1] = f[1][

Codeforces Round #289 (Div. 2, ACM ICPC Rules)——B贪心——Painting Pebbles

There are n piles of pebbles on the table, the i-th pile contains ai pebbles. Your task is to paint each pebble using one of the k given colors so that for each color c and any two piles i and j the difference between the number of pebbles of color c

Codeforces Round #289 (Div. 2, ACM ICPC Rules) (A, B, C, E)

A:水题,根据题目预处理一下输出即可 B:先把最大和最小找出来,可以让最小全是1,然后最大比最小多出的部分就放1,2,3,4,5...所以如果MAX - MIN > k就是NO,不然就根据这个构造出答案 C:贪心的策略,每次要让数字尽量小,那么就和上一个数字比较,如果需要的和比上一个小,就先找到一个新数字,使得和小于所需数字,并且该数字是大于上一个数字的最小值,找的方法就是从末尾不断放0进位.那么现在情况就只剩下需要的和比上一个大的了,这个就贪心,从末尾尽量变成9即可 E:一个计数问题,其实只要

Codeforces Round #289 Div 2

A. Maximum in Table 题意:给定一个表格,它的第一行全为1,第一列全为1,另外的数满足a[i][j]=a[i-1][j]+a[i][j-1],求这个表格中的最大的数 a[n][n]即为最大的数 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[12][12],n; int main() {

Codeforces Round #289 Div. 2 解题报告 A.B.C.E

A - Maximum in Table 纯递推. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set> #include <stdio.h> usin

Tutorial CodeForces Round 289 (Div.2) (Second Winter Computer Camp Selection 2015) 题解

题目链接:点击打开链接 A: #include <cstdio> #include <vector> #include <algorithm> #include <iostream> #include <map> #include <set> #include <queue> #include <cstring> #include <cmath> #include <string> us

Codeforces Round #289 (Div. 2, ACM ICPC Rules)

A题: 有一个n*n的矩阵,矩阵的第一行和第一列的值都为1,其余的有: a[i][j]=a[i-1][j]+a[i][j-1]; 现在给出一个n求出这个n*n的矩阵中最大的数. 显然,最大的数就是a[n][n]. 因为n<=10,所以先预处理出一个10*10的矩阵,然后每输入一个n,直接输出a[n][n]. 1 #include<cstdio> 2 int maze[11][11]; 3 int main() 4 { 5 for(int i=1;i<=10;i++) 6 maze[

Codeforces Round #279 (Div. 2) ABCD

Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name     A Team Olympiad standard input/output 1 s, 256 MB  x2377 B Queue standard input/output 2 s, 256 MB  x1250 C Hacking Cypher standard input/output 1 s, 256 MB  x740 D Chocolate standard input/