题目连接:http://codeforces.com/contest/448

A:给你一些奖杯与奖牌让你推断能不能合法的放在给定的架子上。假设能够就是YES否则就是NO。

<span style="font-size:18px;">#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-12
///#define M 1000100
///#define LL __int64
#define LL long long
///#define INF 0x7ffffff
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
#define zero(x) ((fabs(x)<eps)?0:x) using namespace std; const int maxn = 100010; int num[maxn]; int main()
{
int a1, a2, a3;
int b1, b2, b3;
int n;
while(cin >>a1)
{
cin >>a2>>a3;
cin >>b1>>b2>>b3;
cin >>n;
int sum1 = 0;
sum1 += a1;
sum1 += a2;
sum1 += a3;
int sum2 = 0;
sum2 += b1;
sum2 += b2;
sum2 += b3;
int x = sum1/5;
if(sum1%5) x++;
int y = sum2/10;
if(sum2%10) y++;
if(x+y<= n) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}</span>

B:给你两个字符串,推断假设让s串变成t串须要什么操作。

假设仅仅是删除一些字母就能够得到输出:automaton。假设仅仅是通过调换字母的顺序就输出:array。如既要删除字母又要调换顺序输出:both。假设须要加入新的字母输出:need tree。

#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-12
///#define M 1000100
///#define LL __int64
#define LL long long
///#define INF 0x7ffffff
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
#define zero(x) ((fabs(x)<eps)?0:x) using namespace std; const int maxn = 110; char s1[maxn];
char s2[maxn];
int vis[maxn];
int num[maxn]; int main()
{
while(cin >>s1)
{
cin >>s2;
int len1 = strlen(s1);
int len2 = strlen(s2);
memset(vis, 0, sizeof(vis));
memset(num, 0, sizeof(num));
for(int i = 0; i < len1; i++) vis[s1[i]-'a']++;
int flag1 = 0;
for(int i = 0; i < (len1-len2); i++)
{
int flag = 0;
for(int j = 0; j < len2; j++)
{
if(s1[i+j] != s2[j])
{
flag = 1;
break;
}
}
if(!flag)
{
flag1 = 1;
break;
}
}
int flag2 = 0;
for(int i = 0; i < len2; i++) num[s2[i]-'a']++;
for(int i = 0; i < 26; i++)
{
if(num[i] > vis[i])
{
flag2 = 1;
break;
}
}
if(flag2) cout<<"need tree"<<endl;
else if(flag1) cout<<"automaton"<<endl;
else if(len1 == len2 && !flag2) cout<<"array"<<endl;
else
{
int top = 0;
for(int i = 0; i < len1; i++) if(s1[i] == s2[top]) top++;
if(top == len2) cout<<"automaton"<<endl;
else cout<<"both"<<endl;
}
}
}

C给你一串数字代表木板的高度,每块木板的宽度都为1。

让你算出最少须要多少次能够把木板染完颜色。染得时候能够每次染长度为1的一横行(能够多个连续的木板)或者能够竖着然这个一块木板。每一个木板能够反复染色。

思路是:dp[i][j]表示染到第i块木板的时候染了j次横的。

须要注意的是要从后向前的dp。

#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-12
///#define M 1000100
///#define LL __int64
#define LL long long
///#define INF 0x7ffffff
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
#define zero(x) ((fabs(x)<eps)?0:x) using namespace std; const int maxn = 5010;
int dp[maxn][maxn];
int num[maxn];
int main()
{
int n;
while(cin >>n)
{
num[0] = 0;
for(int i = 1; i <= n; i++) scanf("%d",&num[i]);
for(int i = 0; i <= n; i++) dp[n][i] = 0;
for(int i = n; i >= 1; i--)
{
for(int j = 0; j < i; j++)
{
if(num[i] <= num[j])
{
dp[i-1][j] = dp[i][i];
continue;
}
dp[i-1][j] = min(dp[i][j]+1, dp[i][i]+num[i]-num[j]);
} }
cout<<dp[0][0]<<endl;
}
return 0;
}

D给你n。m,k。n*m的矩阵中的每一个元素是i,j的成绩。然后让你求一个x满足在这个n*m的矩阵中有k个元素小于x。

思路二分枚举x,范围是1-n*m。

可是这里要高速求出小于x的数的个数。

for(int i = 1; i <= n; i++) ans += min(m, mid/i);这个能够高速的统计出这一行中有多少个元素是小于x的。

#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-12
///#define M 1000100
///#define LL __int64
#define LL long long
///#define INF 0x7ffffff
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
#define zero(x) ((fabs(x)<eps)?0:x) using namespace std; const int maxn = 5010;
int dp[maxn][maxn];
int num[maxn];
int main()
{
LL n, m, k;
while(cin >>n>>m>>k)
{
LL l = 1;
LL r = n*m;
while(l < r)
{
LL mid = (l+r)>>1;
LL ans = 0;
for(int i = 1; i <= n; i++) ans += min(m, mid/i);
if(ans >= k) r = mid;
else if(ans < k) l = mid+1;
}
cout<<r<<endl;
}
}

Codeforces Round #256 (Div. 2)A-D的更多相关文章

  1. Codeforces Round #256 (Div. 2) D. Multiplication Table(二进制搜索)

    转载请注明出处:viewmode=contents" target="_blank">http://blog.csdn.net/u012860063?viewmod ...

  2. Codeforces Round #256 (Div. 2) B. Suffix Structures(模拟)

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

  3. Codeforces Round #256 (Div. 2/B)/Codeforces448B_Suffix Structures(字符串处理)

    解题报告 四种情况相应以下四组数据. 给两字符串,推断第一个字符串是怎么变到第二个字符串. automaton 去掉随意字符后成功转换 array 改变随意两字符后成功转换 再者是两个都有和两个都没有 ...

  4. Codeforces Round #256 (Div. 2) 题解

    Problem A: A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standar ...

  5. Codeforces Round #256 (Div. 2) A. Rewards

    A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  6. Codeforces Round #256 (Div. 2) D. Multiplication Table 二分法

     D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes input st ...

  7. Codeforces Round #256 (Div. 2) D. Multiplication Table

    主题链接:http://codeforces.com/contest/448/problem/D 思路:用二分法 code: #include<cstdio> #include<cm ...

  8. Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)

    解题报告 意思就是说有n行柜子,放奖杯和奖牌.要求每行柜子要么全是奖杯要么全是奖牌,并且奖杯每行最多5个,奖牌最多10个. 直接把奖杯奖牌各自累加,分别出5和10,向上取整和N比較 #include ...

  9. Codeforces Round #256 (Div. 2) D. Multiplication Table 很有想法的一个二分

    D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes input stand ...

随机推荐

  1. 洛谷P1341 最受欢迎的奶牛

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

  2. Educational Codeforces Round 10 C. Foe Pairs 水题

    C. Foe Pairs 题目连接: http://www.codeforces.com/contest/652/problem/C Description You are given a permu ...

  3. iOS Masonry的使用需要注意的地方

    自动布局最重要的是约束:UI元素间关系的数学表达式.约束包括尺寸.由优先级和阈值管理的相对位置.它们是添加剂,可能导致约束冲突 .约束不足造成布局无法确定 .这两种情况都会产生异常. 使用前:Auto ...

  4. PHP 基础函数(三)数组和变量之间的转换

    extract($arr);用于把数组中的元素转换成变量导入到当前文件中,键名当作变量名,值作为变量值注:(第二个参数很重要,可以看手册使用)使用方法 echo $a;compact(var1,var ...

  5. HttpURLConnection与 HttpClient 区别/性能测试对比

    HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等, HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便 HttpClient实 ...

  6. python模块整理29-redis模块

    date:20140530auth:jinhttp://github.com/andymccurdy/redis-pyhttps://github.com/andymccurdy/redis-py/b ...

  7. Object-C—集合

    Obejct-C中包含了三种集合,分别是:数组.字典和集(set).       数组和C语言中的数组相似,但是OC中的数组只能存储对象,不能存储基本数据类型,如int.float.enum.stru ...

  8. MySQL5.6新特性之GTID、多线程复制 - 不知为何

    http://www.tuicool.com/articles/yi2aui http://www.cnblogs.com/cenalulu/category/380263.html

  9. text段,data段,bss段,堆和栈

    转载:http://blog.chinaunix.net/uid-29025972-id-3874376.html   程序编译后生成的目标文件至少含有三个段,分别为:.text..data和.bss ...

  10. openssl https 单向认证连接成功示例

    研究这个玩意也有几天的时间了,刚学C 因为不熟悉编译折腾了不少时间,终于弄通了,发个随笔给研究openssl https的同学一点提示吧. 环境: ========================== ...