A:Rewards:

题目链接:http://codeforces.com/problemset/problem/448/A

题意:Bizon有a1个一等奖奖杯,a2个二等奖奖杯,a3个三等奖奖杯,b1个一等奖奖牌,b2个二等奖奖牌,b3个三等奖奖牌,和一个有n个架子的橱柜。如今Bizon想把这些奖牌和奖杯放在橱柜里,可是要遵循以下的规则:一个架子上不能同一时候放奖杯和奖牌;一个架子上的奖杯数量不能超过5个。奖牌数量不能超过10个。

问能不能把这些奖杯和奖牌所有放进去。

分析:依照贪心原则。一个架子上放尽可能多的奖杯和奖牌,求出须要多少个架子,与n比較大小就可以。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
int main()
{
int a1, a2, a3, b1, b2, b3, n;
while(~scanf("%d%d%d%d%d%d%d",&a1, &a2, &a3, &b1, &b2, &b3, &n))
{
int suma = a1 + a2 + a3;
int sumb = b1 + b2 + b3;
int cnta = suma / 5, cntb = sumb / 10;
if(suma % 5 != 0)
cnta++;
if(sumb % 10 != 0)
cntb++;
if(cnta + cntb <= n)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}

B:Suffix Structures

题目链接:http://codeforces.com/problemset/problem/448/B

题意:给出两个串s和t,问能不能把s变成t,假设能够,输出变换时用的数据结构是什么?变换时能够使用两种数据结构:1.suffix
automaton,它能够删除串中的随意一个字符。2.suffix array,它能够交换串中的随意两个字符。

假设仅仅用到suffix
automaton,输出“automaton“;假设仅仅用到”suffix array“,输出”array“;假设两种都用到,输出”both“;假设变不成。输出“need
tree”。

分析:直接模拟就可以。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<cstdlib>
#include<algorithm>
using namespace std;
int main()
{
string s, t;
int a[30], b[30];
while(cin >> s >> t)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
if(s.length() < t.length())
{
cout << "need tree" << endl;
continue;
}
int ls = s.length(), lt = t.length();
if(ls == lt)
{
for(int i = 0; i < ls; i++)
{
a[s[i] - 'a']++;
b[t[i] - 'a']++;
}
int flag = 1;
for(int i = 0; i < 26; i++)
if(a[i] != b[i])
{
flag = 0;
break;
}
if(flag)
cout << "array" << endl;
else
cout << "need tree" << endl;
}
else
{
//cout << "s = " << s << ", t = " << t << endl;
for(int i = 0; i < ls; i++)
a[s[i] - 'a']++;
for(int i = 0; i < lt; i++)
b[t[i] - 'a']++;
int flag = 1, ok = 0;
for(int i = 0; i < 26; i++)
if(a[i] < b[i])
{
flag = 0;
break;
}
if(flag)
{
int j, k = 0;
for(int i = 0; i < ls; i++)
{
if(s[i] == t[k])
k++;
if(k == lt)
{
ok = 1;
break;
}
} //t中的字符在s中不一定连续出现,比如ababa abb,应是 aruomaton。比赛时一直Wa在这。 }
if(flag && ok)
cout << "automaton" << endl;
else if(flag && !ok)
cout << "both" << endl;
else
cout << "need tree" << endl;
}
}
return 0;
}

C.Painting Fence

题目链接:http://codeforces.com/problemset/problem/448/C

题意:Bizon要粉刷他的栅栏。栅栏由n块木板组成,每一块有个高度,每次stroke时必须一直接触着栅栏。问最少须要stroke多少次,能够把栅栏刷好。

分析:分治法。

把栅栏从最低处分成左右两部分,每一部分再这样分下去,直到仅仅剩下一块木板。然后往上返回最小值就可以。

#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 5005;
int a[MAXN];
int solve(int l, int r, int h)
{
int k = l, mmin = a[l];
if(l > r) return 0;
if(l == r) return a[l] > h;
for(int i = l; i <= r; i++)
if(a[i] < mmin)
{
k = i;
mmin = a[i];
}
return min(r-l+1, solve(l, k-1, mmin) + solve(k+1, r, mmin) + (mmin - h));
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
printf("%d\n", solve(0, n-1, 0));
return 0;
} #include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 5005;
int a[MAXN];
int solve(int l, int r)
{
int k = l;
if(l > r) return 0;
for(int i = l; i <= r; i++)
if(a[i] < a[k])
k = i;
int tmp = a[k];
for(int i = l; i <= r; i++)
a[i] -= tmp;
return min(r-l+1, solve(l, k-1) + solve(k+1, r) + tmp);
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
printf("%d\n", solve(0, n-1));
return 0;
}

D:Multiplication Table

题目链接:http://codeforces.com/problemset/problem/448/D

题意:给出一个n行m列的乘法表,第i行第j列的值为i*j,把这些值从小到大排序,问第k个数是多少。

分析:二分。

#include<iostream>
using namespace std;
typedef long long LL;
LL solve(LL n, LL m, LL k)
{
LL l = 0, r = n * m;
while(r - l > 1)
{
LL mid = (r + l) / 2;
LL sum = 0;
for(int i = 1; i <= n; i++)
{
LL tmp = mid / i;
if(tmp > m) tmp = m;
sum += tmp; //sum为不大于mid的值的个数
}
if(sum >= k) r = mid;
else l = mid;
}
return r;
}
int main()
{
LL n, m, k;
while(cin >> n >> m >> k)
{
cout << solve(n, m, k) << endl;
}
return 0;
}

E:Divisors(dfs)

题目链接:http://codeforces.com/problemset/problem/448/E

题意:给出一个数n,把这个数的因子从小到大写出来,然后对这个数的因子运行k次同样的操作,问最后的结果是什么。假设结果超过100000位。仅仅输出前100000位。

分析:由于对每一个数运行的是同样的操作。所以能够用递归写,当运行到不能分解时,输出一个数,直到运行完k次或者个数已经达到了100000个结束。

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef __int64 LL;
const int MAXN = 100000;
LL divisor[MAXN], num;
LL cnt = 0;
void get_divisor(LL x)
{
num = 0;
LL tmp = (LL)sqrt(x);
for(int i = 1; i <= tmp; i++)
{
if(x % i == 0){
divisor[num++] = i;
if(x / i != i)
divisor[num++] = x / i;
}
}
sort(divisor, divisor + num);
} void dfs(LL x, LL k)
{
//cout << "x = " << x << ", k = " << k << endl;
if(cnt >= 100000) return ;
if(k == 0 || x == 1)
{
cout << x << " ";
cnt++;
return ;
}
for(LL i = 0; i < num && divisor[i] <= x; i++)
{
if(x % divisor[i] == 0) {
dfs(divisor[i], k-1);
if(cnt >= 100000) return ;
}
}
} int main()
{
LL x, k;
while(cin >> x >> k)
{
get_divisor(x);
dfs(x, k);
cout << endl;
}
return 0;
}

CodeForces 448的更多相关文章

  1. Codeforces #448 Div2 E

    #448 Div2 E 题意 给出一个数组,有两种类型操作: 选定不相交的两个区间,分别随机挑选一个数,交换位置. 查询区间和的期望. 分析 线段树区间更新区间求和. 既然是涉及到两个区间,那么对于第 ...

  2. Codeforces 448 D. Multiplication Table

    二分法判断答案 D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes inp ...

  3. Codeforces 448 E. Divisors (DFS,储存结构)

    题目链接:E. Divisors 题意: 给出一个X,f(X)是X所有约数的数列(例6:1 2 3 6),给出一个k,k是递归的次数(例:k=2 : f(f(X)) ; X=4,k=2: 1 1 2 ...

  4. Codeforces 448 D. Multiplication Table 二分

    题目链接:D. Multiplication Table 题意: 给出N×M的乘法矩阵要你求在这个惩罚矩阵中第k个小的元素(1 ≤ n, m ≤ 5·10^5; 1 ≤ k ≤ n·m). 题解: n ...

  5. Codeforces 448 C. Painting Fence

    递归.分治. . . C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input ...

  6. Codeforces Round #448 C. Square Subsets

    题目链接 Codeforces Round #448 C. Square Subsets 题解 质因数 *质因数 = 平方数,问题转化成求异或方程组解的个数 求出答案就是\(2^{自由元-1}\) , ...

  7. CodeForces:#448 div2 B. XK Segments

    传送门:http://codeforces.com/contest/895/problem/B B. XK Segments time limit per test1 second memory li ...

  8. CodeForces:#448 div2 a Pizza Separation

    传送门:http://codeforces.com/contest/895/problem/A A. Pizza Separation time limit per test1 second memo ...

  9. Codeforces Round #448(Div.2) Editorial ABC

    被B的0的情况从头卡到尾.导致没看C,心情炸裂又掉分了. A. Pizza Separation time limit per test 1 second memory limit per test ...

随机推荐

  1. (转)深入浅出Java三大框架SSH与MVC的设计模式

    原址:http://www.educity.cn/java/1382738.html 现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2, Spring,Hiber ...

  2. java下拉框,滚动条

    package com.soft.test; /** * 下拉列表.下拉框.滚动条的使用 */ import javax.swing.*; import java.awt.*; public clas ...

  3. 大家帮我测试下,IOCP服务端和客户端交互

    大家帮我测试下,主要是对游戏服务端的测试,这个客户端C#版本,需要NET4.0支持

  4. TCP/IP笔记 三.运输层(2)——TCP 流量控制与拥塞控制

    TCP 的流量控制与拥塞控制可以说是一体的.流量控制是通过滑动窗口实现的,拥塞避免主要包含以下2个内容: (1)慢开始,拥塞避免 (2)快重传,快恢复 1.流量控制——滑动窗口 TCP采用大小可变的滑 ...

  5. 51nod 1244 莫比乌斯函数之和(杜教筛)

    [题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...

  6. oralce dubugs

    1,The listener supports no services 2,invalid specification for system parameter LOCAL_LISTENER crea ...

  7. 基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET

    基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET 于视觉信息的网页分块算法(VIPS) 2012-07-29 15:22 1233人阅读 评论(1) ...

  8. hdu4491 Windmill Animation (几何)

    Windmill Animation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. swift菜鸟入门视频教程-03-字符串和字符

    本人自己录制的swift菜鸟入门,欢迎大家拍砖.有什么问题能够在这里留言. 主要内容: 字符串字面量 初始化空字符串 字符串可变性 字符串是值类型 使用字符 计算字符数量 连接字符串和字符 字符串插值 ...

  10. MyGui 3.2.0(OpenGL平台)的编译

    MyGui是一个用来创建用户图形界面的库,用于游戏和3D应用程序.这个库的主要目标是达到:快速.灵活.易用. 1.下载准备: 源代码:http://svn.code.sf.net/p/my-gui/c ...