Codeforces Round #436 (Div. 2)
http://codeforces.com/contest/864
第一次打cf的月赛……
A
题意:给你一个数列,问你能不能保证里面只有两种数且个数相等。2<=n<=100,1<=ai<=100。
水……没看完题就交了结果YES的时候还要输出这两种数是什么,然后就+1了……
#include <iostream>
#define maxn 105
using namespace std;
int n,a,t[maxn],c[maxn],d[maxn];
int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a;
t[a]++;
}
int cnt=;
for(int i=;i<=;i++)
{
if(t[i])
{
c[++cnt]=t[i];
d[cnt]=i;
}
}
if(cnt!=)
cout<<"NO";
else if(c[]!=c[])
cout<<"NO";
else
cout<<"YES"<<endl<<d[]<<' '<<d[];
return ;
}
B
题意:给你一个只含字母的字符串,求仅由小写字母构成的最长子串。
从左到右扫一遍同时记录长度len,遇到大写字母就更新答案并把len归零就好了。一遍过。
#include <iostream>
#include <string>
#include <cctype>
#include <cstring>
using namespace std;
int n;
string s;
bool used[];
int main()
{
cin>>n>>s;
int len=,cnt=,ans=;
for(int i=;i<n;i++)
{
if(isupper(s[i]))
{
memset(used,false,);
len=;
cnt=;
}
else
{
len++;
if(!used[s[i]])
{
used[s[i]]=true;
cnt++;
ans=max(ans,cnt);
}
}
}
cout<<ans;
return ;
}
C
题意:一条直线道路,起点为0,终点为a,有一辆车在起点和终点来回开k次(来算一次,回算一次)。车的油箱有b汽油,每走1路程就耗1汽油。在路上f的位置有一个加油站,可以帮你把油箱加满。问要完成这k次来回最少需要加多少次油。
如果车现在停在加油站,并且油还够开到终点(或者起点)再回头开到加油站,那么显然不用加油。
干脆把加油站当作检查点,每次检查下还剩多少油,判断需不需要加油。k次以后输出结果。如果加了油也回不来加油站,那么输出-1。要注意特判第一回还有最后一回。
四遍才过……
#include <iostream>
using namespace std;
int a,b,f,k;
int main()
{
cin>>a>>b>>f>>k;
int ans=,pet=b-f;
if(pet<)
{
cout<<-;
return ;
}
bool ahead=true;
for(int i=;i<k;i++)
{
if(ahead)
{
if(pet-*(a-f)>=)
pet-=*(a-f);
else
pet=b-*(a-f),ans++;
}
else
{
if(pet-*f>=)
pet-=*f;
else
pet=b-*f,ans++;
}
ahead^=;
if(pet<)
{
cout<<-;
return ;
}
}
if(ahead)
{
if(pet-(a-f)<)
{
if(b-(a-f)>=)
ans++;
else
{
cout<<-;
return ;
}
}
}
else
{
if(pet-f<)
{
if(b-f>=)
ans++;
else
{
cout<<-;
return ;
}
}
}
cout<<ans;
return ;
}
D
题意:给你一个n项数列,里面的数字均在1~n范围内,问最少替换多少个数字才能变成一个1~n的排序,输出字典序最小的方案。
细节貌似有点多,还没做出来……
E
题意:有n个物品,每个物品价值为pi,拿起来要ti的时间,但是这个物品在时间大于等于di时就不能拿了。问怎样使拿到的物品价值之和最大。
容易看出这是道傻逼背包题,得f(i,j)=max{f(i-1,j), f(i-1,j-t[i])+p[i]} (j<d[i]且j>=t[i]),答案就是max{f(n,x) | 0<=x<=2000}。
当时还不懂怎么输出方案,比赛完了才想到每次转移记录一下,然后从答案开始逆过来找哪个物品被拿了。
然后交了上去,WA了。跑去看下别人的AC代码,发现别人都对物品按照di升序排序再选了。我也试了一发,交上去马上就A了。
之后才想明白,f(i,j)是按照1,2,...,i的顺序选择物品得到的价值最大值,如果不排序就会导致有些在后面但是d很小的物品选不到。
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
int n;
struct item { int t, d, p, id; } a[];
bool cmp(const item& x, const item& y) { return x.d < y.d; }
int dp[][];
bool took[][];
int main()
{
ios::sync_with_stdio(false);
int ans = ;
cin >> n;
for (int i = ; i <= n; i++)
{
a[i].id = i;
cin >> a[i].t >> a[i].d >> a[i].p;
}
sort(a + , a + + n, cmp);
for (int i = ; i <= n; i++)
{
ans = ;
for (int j = ; j <= ; j++)
{
if (j < a[i].d && j >= a[i].t && dp[i - ][j - a[i].t] + a[i].p >= dp[i - ][j])
{
dp[i][j] = dp[i - ][j - a[i].t] + a[i].p;
took[i][j] = true;
}
else
dp[i][j] = dp[i - ][j]; if (dp[i][j] >= dp[i][ans])
ans = j;
}
}
cout << dp[n][ans] << endl;
stack<item> s;
int j = ans;
for (int i = n; i >= ; i--)
{
if (took[i][j])
{
s.push(a[i]);
j -= a[i].t;
}
}
cout << s.size() << endl;
while (!s.empty())
{
cout << s.top().id << ' ';
s.pop();
}
return ;
}
未完待+1s(可能)
Codeforces Round #436 (Div. 2)的更多相关文章
- Codeforces Round #436 (Div. 2)【A、B、C、D、E】
Codeforces Round #436 (Div. 2) 敲出一身冷汗...感觉自己宛如智障:( codeforces 864 A. Fair Game[水] 题意:已知n为偶数,有n张卡片,每张 ...
- Codeforces Round #436 (Div. 2) C. Bus
http://codeforces.com/contest/864/problem/C 题意: 坐标轴上有x = 0和 x = a两点,汽车从0到a之后掉头返回,从a到0之后又掉头驶向a...从0到a ...
- Codeforces Round #436 (Div. 2) E. Fire
http://codeforces.com/contest/864/problem/E 题意: 有一堆物品,每个物品有3个属性,需要的时间,失效的时间(一开始)和价值.只能一件一件的选择物品(即在选择 ...
- Codeforces Round #436 (Div. 2) D. Make a Permutation!
http://codeforces.com/contest/864/problem/D 题意: 给出n和n个数(ai <= n),要求改变其中某些数,使得这n个数为1到n的一个排列,首先保证修改 ...
- Codeforces Round #436 (Div. 2) B. Polycarp and Letters
http://codeforces.com/contest/864/problem/B 题意: 给出一个字符串,要求找到一个集合S,使得从S中选出的所有数,在这些数的位置上的字母全部为小写且是不同的字 ...
- Codeforces Round #436 (Div. 2)D. Make a Permutation! 模拟
D. Make a Permutation! time limit per test: 2 seconds memory limit per test: 256 megabytes input: st ...
- Codeforces Round #436 (Div. 2)C. Bus 模拟
C. Bus time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input out ...
- Codeforces Round #436 (Div. 2) A,B,D
A. Fair Game 题目链接:http://codeforces.com/contest/864/problem/A 水题 #include<iostream> #include&l ...
- 【做题】Codeforces Round #436 (Div. 2) F. Cities Excursions——图论+dfs
题意:给你一个有向图,多次询问从一个点到另一个点字典序最小的路径上第k个点. 考虑枚举每一个点作为汇点(记为i),计算出其他所有点到i的字典序最小的路径.(当然,枚举源点也是可行的) 首先,我们建一张 ...
随机推荐
- Linux环境下网卡配置
DEVICE=eth0 HWADDR=08:00:27:0D:3C:F6 TYPE=Ethernet UUID=73ff4482-1baf-4c9b-b859-720ca92a704a ONBOOT= ...
- Windows环境下Android Studio安装和使用教程
Windows环境下Android Studio安装和使用教程 来源: http://www.cnblogs.com/liuhongfeng/archive/2015/12/30/5084896.ht ...
- A strange lift
Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...
- css变量
CSS变量: 目前主流浏览器都已支持CSS变量,Edge 浏览器也支持 CSS 变量.用户可以方便地在css中使用自定义变量. <!DOCTYPE html> <html lang= ...
- Lambda转sql部分代码保存
public class SqlExpressionTree { public string GetQuerySql<T>(Expression<Func<T, bool> ...
- 【Python】Non-ASCII character '\xe6' 错误解决方法
刚刚在写Python程序的时候遇到了一个问题,无论是在程序中什么地方出现中文字符,都会出现如下错误 SyntaxError: Non-ASCII character '\xe6' 网上查阅了一下这应该 ...
- Map的遍历方法(java)
方法一.Set<Object> keySet();返回集合中所有的key组成的集合. 代码:Map<String , String > map=new HashMap();f ...
- Dijkstra算法(Swift版)
原理 我们知道,使用Breadth-first search算法能够找到到达某个目标的最短路径,但这个算法没考虑weight,因此我们再为每个edge添加了权重后,我们就需要使用Dijkstra算法来 ...
- 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区
开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...
- javascript面向对象编程(OOP)——汇总
目录 一.JS的解析与执行过程 预处理阶段 执行阶段 二.作用域 块作用域 函数作用域 动态作用域 词法作用域 三.闭包 什么是闭包 闭包的好处 四.类与对象 对象 类 原型(prototype) t ...