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)的更多相关文章

  1. Codeforces Round #436 (Div. 2)【A、B、C、D、E】

    Codeforces Round #436 (Div. 2) 敲出一身冷汗...感觉自己宛如智障:( codeforces 864 A. Fair Game[水] 题意:已知n为偶数,有n张卡片,每张 ...

  2. 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 ...

  3. Codeforces Round #436 (Div. 2) E. Fire

    http://codeforces.com/contest/864/problem/E 题意: 有一堆物品,每个物品有3个属性,需要的时间,失效的时间(一开始)和价值.只能一件一件的选择物品(即在选择 ...

  4. Codeforces Round #436 (Div. 2) D. Make a Permutation!

    http://codeforces.com/contest/864/problem/D 题意: 给出n和n个数(ai <= n),要求改变其中某些数,使得这n个数为1到n的一个排列,首先保证修改 ...

  5. Codeforces Round #436 (Div. 2) B. Polycarp and Letters

    http://codeforces.com/contest/864/problem/B 题意: 给出一个字符串,要求找到一个集合S,使得从S中选出的所有数,在这些数的位置上的字母全部为小写且是不同的字 ...

  6. 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 ...

  7. 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 ...

  8. Codeforces Round #436 (Div. 2) A,B,D

    A. Fair Game 题目链接:http://codeforces.com/contest/864/problem/A 水题 #include<iostream> #include&l ...

  9. 【做题】Codeforces Round #436 (Div. 2) F. Cities Excursions——图论+dfs

    题意:给你一个有向图,多次询问从一个点到另一个点字典序最小的路径上第k个点. 考虑枚举每一个点作为汇点(记为i),计算出其他所有点到i的字典序最小的路径.(当然,枚举源点也是可行的) 首先,我们建一张 ...

随机推荐

  1. MUI点击事件获取当前对象,及当前对象的属性值

    //用惯了jquery,开始用mui还是有些不习惯 //直接贴代码吧 <nav class="mui-bar mui-bar-tab"> <a class=&qu ...

  2. 附录三 关于book.h

    本书中用到的公用函数放到了头文件book.h中. #ifndef __BOOK_H__ #define __BOOK_H__ #include <stdio.h> #include < ...

  3. 【转载】SQL注入

             "SQL注入"是一种利用未过滤/未审核用户输入的攻击方法("缓存溢出"和这个不同),意思就是让应用运行本不应该运行的SQL代码.如果应用毫无防 ...

  4. SQL Server 数据类型转换函数

    T-SQL提供了两个显示转换的函数:CAST函数和CONVERT函数. 1. CAST函数 语法: CAST ( expression AS data_type [ ( length ) ] ) 示例 ...

  5. Java微信公众平台开发_07_JSSDK图片上传

    一.本节要点 1.获取jsapi_ticket //2.获取getJsapiTicket的接口地址,有效期为7200秒 private static final String GET_JSAPITIC ...

  6. Java 核心内容相关面试题【3】

    目录 面向对象编程(OOP) 常见的Java问题 Java线程 Java集合类 垃圾收集器 异常处理 Java小应用程序(Applet) Swing JDBC 远程方法调用(RMI) Servlet ...

  7. Maven 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or newer 解决方案

    Eclipse Maven 开发一个 jee 项目时,编译时遇到以下错误:Description Resource Path Location TypeDynamic Web Module 3.0 r ...

  8. Django总结

    Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西.为了达到这个目标,Django 提供了通用W ...

  9. SpringBoot之简单日志配置

    我的目的指定一个文件夹输出:(不采用指定文件的原因是一个文件的大小时间长了会很大,不利于处理) logging: level: root: INFO org.sselab: controller: I ...

  10. LKD: Chapter 8 Bottom Halves and Deferring Work

    In 2.6.x, there are 3 mechanisms for implementing a bottom half: softirqs, tasklets and work queues. ...