这场CF,准备充足,回寝室洗了澡,睡了一觉,可结果。。。

 

水 A - PawnChess

第一次忘记判断相等时A先走算A赢,hack掉。后来才知道自己的代码写错了(摔

for (int i=1; i<=8; ++i)	{
scanf ("%s", s[i]); //!!!
}

数学(找规律) B - The Monster and the Squirrel

题意:多边形每个顶点向其它的点引射线,如果碰到其他射线则停止,问最后多边形被分成多少个区域

分析:搬题解:

Problem B. The monster and the squirrel

After drawing the rays from the first vertex (n - 2) triangles are formed. The subsequent rays will generate independently sub-regions in these triangles. Let's analyse the triangle determined by vertices 1, i, i + 1, after drawing the rays from vertex i and (i + 1) the triangle will be divided into (n - i) + (i - 2) = n - 2 regions. Therefore the total number of convex regions is (n - 2)2

If the squirrel starts from the region that have 1 as a vertex, then she can go through each region of triangle (1, i, i + 1) once. That implies that the squirrel can collect all the walnuts in (n - 2)2 jumps.

 

我一直在猜结论,试了一些公式,但和3,4的情况对不上。(卒

注意爆int

 

数学 C - The Big Race

题意:两个在比赛,每个人的速度固定,终点<=t,问两人不分胜负的可能情况

分析:分类讨论,如果LCM (b, w) <= t, 那么每个LCM的倍数的点以及之后跟着的min (b, w) - 1都是不分胜负的,其他情况不详细分析。。。

注意的是LCM可能爆long long,可以先除和t比较或者转换成double log函数比较

/************************************************
* Author :Running_Time
* Created Time :2015/10/31 星期六 22:41:05
* 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;
const double EPS = 1e-10;
const double PI = acos (-1.0); ll GCD(ll a, ll b) {
return b ? GCD (b, a % b) : a;
} int main(void) {
ll t, w, b; scanf ("%I64d%I64d%I64d", &t, &w, &b);
if (w > b) swap (w, b);
if (w > t && b > t) {
printf ("1/1\n");
}
else if (b > t) {
ll x = GCD (w - 1, t);
printf ("%I64d/%I64d\n", (w - 1) / x, t / x);
}
else if (log ((double) w) + log ((double) b) - log ((double) GCD (w, b)) > log ((double) t)) {
ll x = GCD (w - 1, t);
printf ("%I64d/%I64d\n", (w - 1) / x, t / x);
}
else {
ll lcm = b / GCD (w, b) * w;
if (t % lcm == 0) {
ll y = (w - 1) + (t / lcm - 1) * w + 1;
ll x = GCD (y, t);
printf ("%I64d/%I64d\n", y / x, t / x);
}
else {
ll y = (w - 1) + (t / lcm - 1) * w + (1 + min (t % lcm, w - 1));
ll x = GCD (y, t);
printf ("%I64d/%I64d\n", y / x, t / x);
}
} //cout << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; return 0;
}

  

虚树的直径 D - Super M

题意:一棵树,有若干个点要走,问从哪个点出发可以使得路径最短,走完不用走回起点

分析:如果回到起点的话就是路径上的边的两倍,不回起点就减去一条最长的回路(直径)。首先找出包含所有要走的点的子树,从任意一点DFS找深度最大的点再DFS一遍,这样就可以找到直径,最后贪心找字典序小的直径的端点

/************************************************
* Author :Running_Time
* Created Time :2015/10/31 星期六 22:41:05
* 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 = 123456 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;
const double PI = acos (-1.0); bool mark[N];
int d[N];
int cnt[N];
vector<int> G[N]; void DFS(int u, int fa) {
cnt[u] = 0;
if (mark[u]) cnt[u] = 1;
for (int v, i=0; i<G[u].size (); ++i) {
v = G[u][i];
if (v == fa) continue;
d[v] = d[u] + 1;
DFS (v, u);
cnt[u] += cnt[v];
}
} int main(void) {
int n, m; scanf ("%d%d", &n, &m);
for (int u, v, i=1; i<n; ++i) {
scanf ("%d%d", &u, &v);
G[u].push_back (v);
G[v].push_back (u);
}
int id = -1;
for (int u, i=1; i<=m; ++i) {
scanf ("%d", &u);
mark[u] = true;
if (id == -1 || id > u) {
id = u;
}
}
if (m == 1) {
printf ("%d\n0\n", id); return 0;
}
DFS (1, 0);
id = -1;
for (int i=1; i<=n; ++i) {
if (mark[i] && (id == -1 || d[id] < d[i])) {
id = i;
}
}
int es = 0, len = 0;
memset (d, 0, sizeof (d));
DFS (id, 0); //从深度最深的点开始搜
for (int i=1; i<=n; ++i) {
if (cnt[i] > 0 && m - cnt[i] > 0) { //这个cnt数组记录了以i为根的子树中被攻击的城市的个数
es += 2;
}
if (mark[i]) len = max (len, d[i]);
}
for (int i=1; i<=n; ++i) { //找到直径后取id小的端点
if (mark[i] && i < id && d[i] == len) {
id = i; break;
}
}
printf ("%d\n%d\n", id, es - len); //cout << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; return 0;
}

  

Codeforces Round #328 (Div. 2)的更多相关文章

  1. Codeforces Round #328 (Div. 2) D. Super M

    题目链接: http://codeforces.com/contest/592/problem/D 题意: 给你一颗树,树上有一些必须访问的节点,你可以任选一个起点,依次访问所有的必须访问的节点,使总 ...

  2. Codeforces Round #328 (Div. 2) D. Super M 虚树直径

    D. Super M Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/problem/D ...

  3. Codeforces Round #328 (Div. 2) C. The Big Race 数学.lcm

    C. The Big Race Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/probl ...

  4. Codeforces Round #328 (Div. 2) B. The Monster and the Squirrel 打表数学

    B. The Monster and the Squirrel Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/c ...

  5. Codeforces Round #328 (Div. 2) A. PawnChess 暴力

    A. PawnChess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/problem/ ...

  6. Codeforces Round #328 (Div. 2)_B. The Monster and the Squirrel

    B. The Monster and the Squirrel time limit per test 1 second memory limit per test 256 megabytes inp ...

  7. Codeforces Round #328 (Div. 2)_A. PawnChess

    A. PawnChess time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  8. Codeforces Round #328 (Div. 2) A

    A. PawnChess time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  9. Codeforces Round #328 (Div. 2) C 数学

    C. The Big Race time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

随机推荐

  1. 没玩过这些微信小游戏你就out了

    你确定没玩过下面这些微信小游戏?是不是有点out了?赶紧添加微信号kangfuyk,回复H5马上畅玩! 当然了,扫一下二维码关注后回复H5更快捷噢! 微信小游戏列表,持续更新中 辨色大比拼!心理游戏 ...

  2. ext3文件系统反删除利器-ext3grep

    导读 Linux作为企业级服务器,数据的安全性至关重要,任何数据德尔丢失和误删都是不可容忍的!最近我接触到一款软件-ext3grep,它可以恢复误删的数据,下面简单讲解一下这个软件. ext3grep ...

  3. C语言中%d,%o,%f,%e,%x的意义

    printf(格式控制,输出列表) 格式控制包括格式说明和格式字符. 格式说明由“%”和格式字符组成,如%d%f等.它的作用是将输出的数据转换为指定的格式输出.格式说明总是由“%”字符开始的.不同类型 ...

  4. GraphicsMagick为图片添加水印

    GraphicsMagick号称图像处理领域的瑞士军刀.提供了健壮及高效的图像处理工具包和库,支持超过88种主流图片格式包括:BMP,GIF,JPEG,JPEG-2000,PNG,PDF,PNM,TI ...

  5. jQuery结合Ajax实现简单的前端验证和服务端查询

    上篇文章写了简单的前端验证由传统的JavaScript转向流畅的jQuery滑动验证,现在拓展一下,使用Ajax实现用户体验比较好的异步查询,同样还是从建立一个简单的表单开始 <form nam ...

  6. Transfer-Encoding: chunked

    Http1.1中 使用 chunked 编码传送时 没有CONTENT_LENGTH,下载之前无法确定要下载的大小. Wininet中已经内嵌该传输协议,要查看chunked块的大小只能socket底 ...

  7. Java for LeetCode 070 Climbing Stairs

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  8. 【USACO】packrec

    这道题卡了很久,开始没读清楚题,没看到题目中给的6个组合是仅可能的组合,一直自己想有多少种组合方式.后来才发现,于是就想到写遍历.我想的是,这六种情况下,每个位置摆哪个矩形是不确定的,于是可以对方块的 ...

  9. LINUX安全设置

    3. 为单用户引导加上密码   在“/etc/lilo.conf”文件中加入三个参数:time-out,restricted,password.这三个参数可以使你的系统在启动lilo时就要求密码验证. ...

  10. 泥泞的道路(codevs 1183)

    题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和地形的科学 ...