Codeforces Round #253 (Div. 1)

题目链接

A:给定一些牌,然后如今要提示一些牌的信息,要求提示最少,使得全部牌能够被分辨出来。

思路:一共2^10种情况,直接暴力枚举,然后对于每种情况去推断,推断的时候仅仅要两两张牌枚举出来推断就可以。不得不说CF机子真心强大,2秒限制还是能跑10^8

B:给定n个发生概率,求选出当中一些事件,使得正好有一件发生的概率最大。

思路:贪心,从大到小排序概率,然后一个个概率进来推断有没有更大,有就增加该事件,没有就跳过

C:给定n个数字,要求一个个删掉数字,假设数字左边或右边没有数字就不得分,否则得分为min(左边数字,右边数字)。

思路:贪心,考虑两种情况,一种下凹的形状,这样的情况下肯定是由中间的优先拿掉在到两边,对于这样的情况能够用一个栈去维护,每次要入栈前,先把之间拿掉并记录答案,在入栈。

这样处理完了,下凹的形状都没了,图形为先递增后递减形状,这时候答案是固定的了,就是最大的两个值肯定是取不到了,剩下的都能取到。这两部分和加起来就是答案

代码:

A题:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const char c[15] = {'1', '2', '3', '4', '5', 'B', 'Y', 'W', 'G', 'R'}; int n, vis[105][2];
char card[105][5]; int bitcount(int x) {
if (x == 0) return 0;
return bitcount(x>>1) + (x&1);
} bool judge(int s) {
memset(vis, 0, sizeof(vis));
for (int i = 0; i < 10; i++) {
if (s&(1<<i)) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < 2; k++) {
if (card[j][k] == c[i])
vis[j][k] = 1;
}
}
}
}
for (int i = 0; i < n; i++) {
if (vis[i][0] && vis[i][1]) continue;
for (int j = i + 1; j < n; j++) {
if (strcmp(card[i], card[j]) == 0) continue;
if (vis[j][0] && vis[j][1]) continue;
if (!vis[i][0] && !vis[i][1] && !vis[j][0] && !vis[j][1]) return false;
if (!vis[i][0] && !vis[j][0] && card[i][1] == card[j][1]) return false;
if (!vis[i][1] && !vis[j][1] && card[i][0] == card[j][0]) return false;
}
}
return true;
} int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%s", card[i]);
int ans = 10;
for (int i = 0; i < (1<<10); i++) {
if (judge(i)) {
ans = min(ans, bitcount(i));
}
}
printf("%d\n", ans);
return 0;
}

B题:

#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; const int N = 105;
int n, save[N], sn;
double p[N], sum; double cal(int now) {
double ss = sum * (1 - p[now]);
double ans = sum * p[now];
for (int i = 0; i < sn; i++) {
ans += ss / (1 - p[save[i]]) * p[save[i]];
}
return ans;
} int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lf", &p[i]);
}
sort(p, p + n);
sn = 1;
save[0] = n - 1;
sum = (1 - p[n - 1]);
double Max = p[n - 1];
for (int i = n - 2; i >= 0; i--) {
double tmp = cal(i);
if (tmp > Max) {
sum *= (1 - p[i]);
Max = tmp;
save[sn++] = i;
}
}
printf("%.12lf\n", Max);
return 0;
}

C题:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const int N = 500005;
int n, top;
long long stack[N], x, ans; int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &x);
while (top > 0 && stack[top - 1] >= stack[top] && x >= stack[top]) {
ans += min(stack[top - 1], x);
top--;
}
stack[++top] = x;
}
sort(stack + 1, stack + 1 + top);
for (int i = 1; i <= top - 2; i++) {
ans += stack[i];
}
printf("%lld\n", ans);
return 0;
}

Codeforces Round #253 (Div. 1) (A, B, C)的更多相关文章

  1. Codeforces Round 253 (Div. 2)

    layout: post title: Codeforces Round 253 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  2. Codeforces Round #524 (Div. 2)(前三题题解)

    这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...

  3. Codeforces Round #624 (Div. 3)(题解)

    Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...

  4. Codeforces Round #253 (Div. 2) D题

    题目大意是选出一个其他不选,问问最大概率: 刚开始想到DP:F[I][J][0]:表示从 前I个中选出J个的最大值, 然后对于F[I][J][1]=MAX(F[I-1][J][1],F[I-1][J- ...

  5. Codeforces Round #219 (Div. 1)(完全)

    戳我看题目 A:给你n个数,要求尽可能多的找出匹配,如果两个数匹配,则ai*2 <= aj 排序,从中间切断,分成相等的两半后,对于较大的那一半,从大到小遍历,对于每个数在左边那组找到最大的满足 ...

  6. Codeforces Round #545 (Div. 2)(D. Camp Schedule)

    题目链接:http://codeforces.com/contest/1138/problem/D 题目大意:给你两个字符串s1和s2(只包含0和1),对于s1中,你可以调换任意两个字符的位置.问你最 ...

  7. Codeforces Round #249 (Div. 2) (模拟)

    C. Cardiogram time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. Codeforces Round #589 (Div. 2) (e、f没写)

    https://codeforces.com/contest/1228/problem/A A. Distinct Digits 超级简单嘻嘻,给你一个l和r然后寻找一个数,这个数要满足的条件是它的每 ...

  9. Codeforces Round #796 (Div. 2)(A~E题题解)

    文章目录 原题链接: A.Cirno's Perfect Bitmasks Classroom 思路 代码 B.Patchouli's Magical Talisman 思路 代码 C.Manipul ...

随机推荐

  1. Sprite Kit教程:制作一个通用程序 2

    注1:本文译自Sprite Kit Tutorial: Making a Universal App: Part 2 目录 动画的定义:可行性 属性列表 添加游戏逻辑 添加音效 何去何从 上一篇文章中 ...

  2. Js三级联动菜单

    效果演示: <SCRIPT LANGUAGE="JavaScript"> <!-- function CreateSelect(_FormName,_SName, ...

  3. 开发人员福利!ChromeSnifferPlus 插件正式登陆 Chrome Web Store

    今天(2014-10-30)下午,ChromeSnifferPlus 插件正式登陆 Chrome Web Store. 在线安装地址: https://chrome.google.com/websto ...

  4. Java核心技术-高级特性(2)- SoftReference, WeakReference and PhantomReference

    Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java 垃圾回收器密切相关的引用类.这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍 Ja ...

  5. vc++远程调试工具

    简单来说: 1>在远程机器跑VC自带的远程调试工具msvsmon.exe,并把要调试的程序跑起来 2>用VC调试器附加进程,即可调试 先展开来说: VC8,VC9都自带远程调试工具,可以在 ...

  6. [Android]Eclipse的使用

    1.取消Eclipse拼写检查 General -> Editors -> Text Editors -> Spelling 取消enable spell checking 前面的勾 ...

  7. 深入探讨:LBS是一种工具而非一种模式

    移动互联网的快速发展,带动着移动互联网应用的不断创新.从2010起,LBS的概念就在中国迅速兴起,但到了2011年底提供LBS服务的企业从最多50家已经降至仅剩15家.投行在看好移动互联网的同时又对L ...

  8. linux下安装QT过程

    说QT是linux下主要的图形开发工具一点都不过分,虽然诺基亚公司放弃Meego.遣散了Qt开发团队,但是它的各种商业.企业版本还是的到了很好的保护,linux下的开发工具集里还是经常看到它的身影,毕 ...

  9. STM32 + RT Thread OS 学习笔记[四]

    1.  补注 a)      硬件,打通通讯通道 若学习者购买了学习板,通常可以在学习板提供的示例代码中找到LCD的相关驱动代码,基本上,这里的驱动的所有代码都可以从里面找到. 从上面的示意图可见,M ...

  10. java Process在windows的使用汇总(转)

    最常用的是ant(java工程中流行),maven,及通用的exec(只要有shell脚本如.sh,.bat,.exe,.cmd等).而其实前两者不容易出错,后者却遇到了以下问题:Caused by: ...