Codeforces Round #256 (Div. 2)A-D
题目连接: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的更多相关文章
- Codeforces Round #256 (Div. 2) D. Multiplication Table(二进制搜索)
转载请注明出处:viewmode=contents" target="_blank">http://blog.csdn.net/u012860063?viewmod ...
- Codeforces Round #256 (Div. 2) B. Suffix Structures(模拟)
题目链接:http://codeforces.com/contest/448/problem/B --------------------------------------------------- ...
- Codeforces Round #256 (Div. 2/B)/Codeforces448B_Suffix Structures(字符串处理)
解题报告 四种情况相应以下四组数据. 给两字符串,推断第一个字符串是怎么变到第二个字符串. automaton 去掉随意字符后成功转换 array 改变随意两字符后成功转换 再者是两个都有和两个都没有 ...
- Codeforces Round #256 (Div. 2) 题解
Problem A: A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 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 ...
- 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 ...
- Codeforces Round #256 (Div. 2) D. Multiplication Table
主题链接:http://codeforces.com/contest/448/problem/D 思路:用二分法 code: #include<cstdio> #include<cm ...
- Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)
解题报告 意思就是说有n行柜子,放奖杯和奖牌.要求每行柜子要么全是奖杯要么全是奖牌,并且奖杯每行最多5个,奖牌最多10个. 直接把奖杯奖牌各自累加,分别出5和10,向上取整和N比較 #include ...
- 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 ...
随机推荐
- iOS Core Animation 动画 入门学习(一)基础
reference:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide ...
- 快速开发一个自己的微信小程序
一.写在前面 1.为什么要学小程序开发? 对于前端开发而言,微信小程序因为其简单快速.开发成本低.用户流量巨大等特点,也就成了前端开发工程师必会的一个技能. 2.先看看小程序效果 (1)欢迎页 (2) ...
- 28个Java常用的工具类
源码下载:http://pan.baidu.com/s/1pJLSczD Base64.javaBase64DecodingException.javaCConst.javaCharTools.jav ...
- Windows UWP开发系列 – 3D变换
在Win8.1中,引入了一个PlaneProjection可以实现3D变换,但它的变换方式比较简单,只能实现基本的旋转操作.在Windows 10 UWP中,引入了一个更加强大的3D变换Transfo ...
- PWM DAC Low Pass Filtering
[TI博客大赛][原创]LM3S811之基于PWM的DAC http://bbs.ednchina.com/BLOG_ARTICLE_3005301.HTM http://www.fpga4fun.c ...
- BR16F84 OBD II Interface Chip For PWM, VPW, and ISO 9141-2 Vehicles
http://faq.ford77.ru/pdf/eec/DataSheet.pdf FEATURES:Operating Voltage 5.0 VOperating Current 5 Ma. T ...
- vi命令用法
从shell中启动可视化编辑器vi filename指示shell启动vi编辑器,并将参数filename传给它.如果当前目前中存在该文件,则vi编辑器将它解释为要打开的文件:如果没有该文件,则vi编 ...
- Android开发之MdiaPlayer详解
Android开发之MdiaPlayer详解 MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用. ...
- iOS: FFmpeg的使用二
1.下载并编译FFMPEG. https://github.com/kewlbear/FFmpeg-iOS-build-script 下载后有一个build-ffmpeg.sh文件.终端执行即可自动下 ...
- java如何判断编码是否是utf8编码
String的getBytes()方法是得到一个系统默认的编码格式的字节数组getBytes("utf-8") 得到一个UTF-8格式的字节数组 把String转换成bytes, ...