以后每做完一场CF,解题报告都写在一起吧

 

暴力||二分 A - Bear and Elections

题意:有n个候选人,第一个候选人可以贿赂其他人拿到他们的票,问最少要贿赂多少张票第一个人才能赢

分析:正解竟然是暴力!没敢写暴力,卡了很久,导致这场比赛差点爆零!二分的话可以优化,但对于这题来说好像不需要。。。

收获:以后CF div2的A题果断暴力

 

代码(暴力):

/************************************************
* Author :Running_Time
* Created Time :2015-8-30 0:40:46
* File Name :A.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e3 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[N];
int n, x; int main(void) {
scanf ("%d", &n);
scanf ("%d", &a[0]); n--;
for (int i=1; i<=n; ++i) scanf ("%d", &a[i]);
int ans = 0;
while (true) {
int mxi = 0;
for (int i=1; i<=n; ++i) {
if (a[i] >= a[mxi]) mxi = i;
}
if (mxi == 0) break;
ans++; a[0]++; a[mxi]--;
}
printf ("%d\n", ans); return 0;
}

  

代码(二分):

/************************************************
* Author :Running_Time
* Created Time :2015-8-30 0:40:46
* File Name :A.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e3 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[N];
int n; bool cmp(int x, int y) {
return x > y;
} bool check(int add) {
int y = a[0] + add;
for (int i=1; i<=n; ++i) {
if (a[i] >= y) {
if (add <= 0) return false;
add -= (a[i] - (y - 1));
if (add < 0) return false;
}
else break;
}
return true;
} int main(void) {
scanf ("%d", &n);
scanf ("%d", &a[0]); n--;
for (int i=1; i<=n; ++i) scanf ("%d", &a[i]);
sort (a+1, a+1+n, cmp);
if (a[0] > a[1]) {
puts ("0"); return 0;
}
int l = 0, r = 1000;
while (l <= r) {
int mid = (l + r) >> 1;
if (check (mid)) r = mid - 1;
else l = mid + 1;
}
printf ("%d\n", l); return 0;
}

  

暴力 B - Bear and Three Musketeers

题意:找一个三元环并且三个点的度数和-6最小

分析:三元环做过一题。这题能暴力跑过,DFS不用写。枚举边的两个端点,再找是否存在另外一个点构成三元环就可以了

收获:CF div2 B也暴力过

 

代码:

/************************************************
* Author :Running_Time
* Created Time :2015-8-25 19:24:24
* File Name :E_topo.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
typedef pair<int, int> PII;
const int N = 4e3 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int deg[N];
bool g[N][N];
vector<PII> G;
int n, m; int main(void) {
scanf ("%d%d", &n, &m);
G.clear ();
memset (g, false, sizeof (g));
memset (deg, 0, sizeof (deg)); for (int u, v, i=1; i<=m; ++i) {
scanf ("%d%d", &u, &v);
G.push_back (PII (u, v));
g[u][v] = true; g[v][u] = true;
deg[u]++; deg[v]++;
} int ans = INF;
for (int i=0; i<G.size (); ++i) {
int u = G[i].first, v = G[i].second;
for (int j=1; j<=n; ++j) {
if (g[u][j] && g[v][j]) {
ans = min (ans, deg[u] + deg[v] + deg[j] - 6);
}
}
} printf ("%d\n", (ans == INF) ? -1 : ans); return 0;
}

  

数学 C - Bear and Poker

题意:给n个数字,每个数字能*2或*3(可多次),问是否能使得n个数相等

分析:要达到相等,那么每个数字除了2和3的数字外的剩余数字要相等,一个数除2或3是log级别的? 复杂度不会分析。。。

收获:其实这题很水,想到/2 /3就行了

代码:

/************************************************
* Author :Running_Time
* Created Time :2015-8-30 1:42:08
* File Name :C.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[N]; int GCD(int a, int b) {
return b ? GCD (b, a % b) : a;
} int main(void) {
int n; scanf ("%d", &n);
for (int i=1; i<=n; ++i) scanf ("%d", &a[i]);
bool flag = true;
for (int i=1; i<=n; ++i) {
while (a[i] % 2 == 0) a[i] /= 2;
while (a[i] % 3 == 0) a[i] /= 3;
}
for (int i=1; i<n; ++i) {
if (a[i] != a[i+1]) {
flag = false; break;
}
}
puts (flag ? "Yes" : "No"); return 0;
}

  

DP D - Bear and Blocks

题意:有n列高度不等的方块,每次可以将和空气(至少一面不和砖头或地面接触)接触的搬走,问要搬几次

分析:先考虑一列方块时只要搬一次。两列时,如果第二列高度大于第一列,那么搬两次,否则只搬一次。三列的情况同理

问题转换成最长连续上升序列,从前往后扫一次还有从后往前扫一次,两次取最小值,答案取最大值

代码:

/************************************************
* Author :Running_Time
* Created Time :2015-8-30 16:56:38
* File Name :D.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[N], dp1[N], dp2[N]; int main(void) {
int n; scanf ("%d", &n);
for (int i=0; i<n; ++i) scanf ("%d", &a[i]);
dp1[0] = 1;
for (int i=1; i<n; ++i) dp1[i] = min (a[i], dp1[i-1] + 1);
dp2[n-1] = 1;
for (int i=n-2; i>=0; --i) dp2[i] = min (a[i], dp2[i+1] + 1);
int ans = 0;
for (int i=0; i<n; ++i) {
ans = max (ans, min (dp1[i], dp2[i]));
}
printf ("%d\n", ans); return 0;
}

  

E - Bear and Drawing

Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)的更多相关文章

  1. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) B. Bear and Blocks 水题

    B. Bear and Blocks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/573/pr ...

  2. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) A. Bear and Poker 分解

    A. Bear and Poker Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/573/pro ...

  3. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) C. Bear and Drawing

    题目链接:http://codeforces.com/contest/573/problem/C题目大意:在两行无限长的点列上面画n个点以及n-1条边使得构成一棵树,并且要求边都在同一平面上且除了节点 ...

  4. 校内选拔I题题解 构造题 Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2) ——D

    http://codeforces.com/contest/574/problem/D Bear and Blocks time limit per test 1 second memory limi ...

  5. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2) A. Bear and Elections 优先队列

                                                    A. Bear and Elections                               ...

  6. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2) B. Bear and Three Musketeers 枚举

                                          B. Bear and Three Musketeers                                   ...

  7. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)C. Bear and Poker

                                                  C. Bear and Poker                                     ...

  8. Codeforces Round #539&#542&#543&#545 (Div. 1) 简要题解

    Codeforces Round #539 (Div. 1) A. Sasha and a Bit of Relax description 给一个序列\(a_i\),求有多少长度为偶数的区间\([l ...

  9. Codeforces Round VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM 暴力出奇迹!

    VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM Time Lim ...

随机推荐

  1. Md5扩展攻击的原理和应用

    *本文原创作者:Guilty and Innocent,本文属FreeBuf原创奖励计划,未经许可禁止转载 做CTF题目的过程中遇到了md5扩展攻击,参考了几篇文章,感觉写的都有些小缺陷,再发一篇文章 ...

  2. SeaGlass:手工搭建伪基站监控系统

    “伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器.短信发信机等相关设备能够搜取以其为中心.一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手 ...

  3. MySQL学习系列之触发器

    触发器简介 触发器作用: 监控某种事件并触发某种动作 触发语法: CREATE TRIGGER trigger_name trigger_event ON tbl_name FOR EACH ROW ...

  4. 弄技术要弄通-公司reis的pub/sub怎么使用的呢?

    Pub/Sub in Redis using PHP Posted on November 14, 2011by xmeng I would like to put an example togeth ...

  5. Java 8 中的 java.util.Optional

    Java 8 中的 java.util.Optional 学习了:https://blog.csdn.net/sun_promise/article/details/51362838 package ...

  6. vue + vue-lazyload 实现图片懒加载

    1.安装 npm i vue-lazyload -S 2.配置 main.js /***图片模板等懒加载 start ***/ import VueLazyload from 'vue-lazyloa ...

  7. ZOJ 3632 Watermelon Full of Water (线段树 区间更新 + dp)

    题目大意: 让每天都能吃到西瓜. 最少须要花多少钱. 思路分析: dp[pos] 就表示  要让 前i天每天都有西瓜吃.最少须要花多少钱. 那么假设你买这个西瓜的话. 那么这个西瓜能吃的持续时间都要更 ...

  8. GCC编译动态和静态链接库例子

    我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而是 ...

  9. linux document and directory find

    http://suchalin.blog.163.com/blog/static/55304677201062924959497/ Linux 查看文件夹大小及文件数量命令 2010-07-29 14 ...

  10. NHibernate不支持复杂的linq,就一定要用DataTable这么低级吗

    有些linq,好不容易写出来,正想扬眉吐屁一番,不料用NHibernate一执行,却报错,说是不支持,我靠. 只好捏着鼻子写一大段sql,交给它.这种直接执行SQL的情况,我看我同事写的,全部都是返回 ...