A.Xenia and Divisors

题意:给定N个数,每个数的取值范围为1-7,N是3的倍数,判定是否能够恰好将N个数分成若干三元组,使得一个组中的元素a,b,c满足 a < b < c 并且 a|b && b|c(整除)。

分析:满足这种条件的三元组只有[1, 2, 4], [1, 2, 6], [1, 3, 6]因此如果有5或者是7肯定是不行的,然后是1的个数要等于4和6的个数之和,最后就是2的数量必须4的数量。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = ;
int n;
int cnt[]; int main() {
int x;
bool flag = false;
scanf("%d", &n);
for (int i = ; i < n; ++i) {
scanf("%d", &x);
if (x == || x == ) flag = true;
cnt[x]++;
}
if (flag || cnt[] != cnt[]+cnt[] || cnt[] < cnt[]) {
puts("-1");
return ;
}
for (int i = ; i < cnt[]; ++i) puts("1 2 4");
for (int i = ; i < cnt[]; ++i) puts("1 3 6");
for (int i = ; i < cnt[]-cnt[]; ++i) puts("1 2 6");
return ;
}

B.Xenia and Spies

题意:有N个人站成一行,现在有一个情报要从编号S传到编号F,每次每个人只能够向左或者向右边的一个人传送。给定一个时间表,某一段时间内某个区间的人使不能够接收和传送情报,要求输出花最小时间的代价的传送方案。

分析:可以得到一个结论,如果S < F,那么情报不可能向左边传,顶多是停在某个人手中,S > F 同理,因此直接模拟即可。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int M = ;
int n, m, s, f; struct interval {
int l, r, ti;
void read() {
scanf("%d %d %d", &ti, &l, &r);
}
bool judge(int x) {
if (x >= l && x <= r) return false;
else return true;
}
}q[M]; void solve() {
int dir = s < f ? : -;
char ch = s < f ? 'R' : 'L';
int ti = ;
int X = ;
while (s != f) {
++ti;
if (ti == q[X].ti) {
if (q[X].judge(s) && q[X].judge(s+dir)) putchar(ch), s += dir;
else putchar('X');
X++;
} else {
putchar(ch);
s += dir;
}
}
} int main() {
scanf("%d %d %d %d", &n, &m, &s, &f);
for (int i = ; i < m; ++i) {
q[i].read();
}
solve();
return ;
}

C.Cupboard and Balloons

题意:问一个橱柜中能够放置多少个球。

分析:其实就是一个分段函数,可以分别在顶端放1个,放2个,放3个的h取值。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; int r, h;
const double eps = 1e-; int sign(double x) {
return x < -eps ? - : x > eps ? : ;
} int get(double x) {
if (sign(*x - sqrt()*r) >= ) return ;
else if (sign(*x - r) >= ) return ;
else return ;
} int main() {
scanf("%d %d", &r, &h);
printf("%d\n", h/r* + get(h-h/r*r));
return ;
}

D.Xenia and Dominoes

题意:给定一个3*N的棋盘,其中某些位置不能够放置,并且有一个点是空的,问使用1*2的方格来平铺能够有多少种方案,要求一个空格周围有1*2的方格可能移动。

分析:与其他的题目稍有不同的就是棋盘多了一些限制并且有一个点周围的点至少有一个1*2的方格能够移动。对于前者,在dp的时候做个位运算即可,后者我的做法是用总的方案数减去不合法的方案数。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std; const int mod = int(1e9)+;
vector<int>vt[];
int dp[][];
int mp[];
int ocp[];
int n, cx, cy; void pre() {
vt[].push_back();
vt[].push_back();
vt[].push_back();
vt[].push_back(), vt[].push_back();
vt[].push_back();
vt[].push_back();
vt[].push_back(), vt[].push_back();
vt[].push_back(), vt[].push_back(), vt[].push_back();
} int cal_1() { // 计算全部的情况
dp[][] = ;
for (int i = ; i <= n; ++i) {
for (int j = ; j < ; ++j) {
if ((j & mp[i]) != j) continue;
for (int k = ; k < (int)vt[j].size(); ++k) {
dp[i][j|ocp[i]] = (1LL*dp[i][j|ocp[i]] + dp[i-][vt[j][k]])%mod;
}
}
}
return dp[n][];
} int cal_2() { // 计算非法的情况
memset(dp, , sizeof (dp));
dp[][] = ;
for (int i = ; i <= n; ++i) {
if (i+ == cx) { // 如果是空点的上一行
for (int j = ; j < ; ++j) {
if ((j & mp[i]) != j) continue;
for (int k = ; k < (int)vt[j].size(); ++k) {
if (!(vt[j][k] & ( << cy-))) continue;
dp[i][j|ocp[i]] = (1LL*dp[i][j|ocp[i]] + dp[i-][vt[j][k]])%mod;
}
}
} else if (i == cx) { // 如果是空点的所在行
for (int j = ; j < ; ++j) {
if ((j & mp[i]) != j) continue;
for (int k = ; k < (int)vt[j].size(); ++k) {
if (cy==&&(j&(<<cy-))&&(j&(<<cy-))&&(vt[j][k]&(<<cy-))&&(vt[j][k]&(<<cy-))) continue;
if (cy==&&(j&(<<cy))&&(j&(<<cy+))&&(vt[j][k]&(<<cy))&&(vt[j][k]&(<<cy+))) continue;
dp[i][j|ocp[i]] = (1LL*dp[i][j|ocp[i]] + dp[i-][vt[j][k]])%mod;
}
}
} else if (i- == cx) { // 如果是空点的下数第二行
for (int j = ; j < ; ++j) {
if ((j & mp[i]) != j) continue;
for (int k = ; k < (int)vt[j].size(); ++k) {
if (!(vt[j][k] & ( << cy-))) continue;
dp[i][j|ocp[i]] = (1LL*dp[i][j|ocp[i]] + dp[i-][vt[j][k]])%mod;
}
}
} else {
for (int j = ; j < ; ++j) {
if ((j & mp[i]) != j) continue;
for (int k = ; k < (int)vt[j].size(); ++k) {
dp[i][j|ocp[i]] = (1LL*dp[i][j|ocp[i]] + dp[i-][vt[j][k]])%mod;
}
}
}
}
return dp[n][];
} int main() {
pre();
scanf("%d", &n);
char str[];
for (int i = ; i <= ; ++i) {
scanf("%s", str+);
for (int j = ; j <= n; ++j) {
mp[j] |= (int)(str[j]=='.') << (i-);
ocp[j] |= (int)(str[j]!='.') << (i-);
if (str[j] == 'O') cx = j, cy = i;
}
}
printf("%d\n", (cal_1()-cal_2()+mod)%mod);
return ;
}

E.Xenia and Tree

题意:给定一棵树,初始化1号节点为红色,其他点为蓝色。有两种操作:1.将某个点从蓝色变成红色;2.询问某个节点到最近的红色的点的距离。

分析:对于1操作保留要改变的点,当有询问时在bfs更新。不过觉得这种做法在树退化成一条链时时间复杂度为O(N^2)。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
typedef unsigned int uint;
const int N = ;
int dis[N];
char vis[N];
int n, m;
vector<int>vt;
queue<int>q; struct Edge {
int v, nxt;
}e[N<<];
int idx, head[N]; void addedge(int a, int b) {
e[idx].v = b, e[idx].nxt = head[a];
head[a] = idx++;
} void spread() {
memset(vis, , sizeof (vis));
for (uint i = ; i < vt.size(); ++i) {
dis[vt[i]] = ;
vis[vt[i]] = ;
q.push(vt[i]);
}
vt.clear();
while (!q.empty()) {
int u = q.front(); q.pop();
vis[u] = ;
for (int i = head[u]; ~i; i = e[i].nxt) {
int v = e[i].v;
if (dis[v] > dis[u] + ) {
dis[v] = dis[u] + ;
if (!vis[v]) vis[v] = , q.push(v);
}
}
}
} int main() {
int a, b;
idx = ;
memset(head, 0xff, sizeof (head));
memset(dis, 0x3f, sizeof (dis));
scanf("%d %d", &n, &m);
for (int i = ; i < n; ++i) {
scanf("%d %d", &a, &b);
addedge(a, b), addedge(b, a);
}
vt.push_back();
for (int i = ; i < m; ++i) {
scanf("%d %d", &a, &b);
if (a == ) vt.push_back(b);
else spread(), printf("%d\n", dis[b]);
}
return ;
}

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

  1. Codeforces Round #199 (Div. 2) E. Xenia and Tree

    题目链接 2了,差点就A了...这题真心不难,开始想的就是暴力spfa就可以,直接来了一次询问,就来一次的那种,TLE了,想了想,存到栈里会更快,交又TLE了..无奈C又被cha了,我忙着看C去了.. ...

  2. Codeforces Round #199 (Div. 2) A Xenia and Divisors

    注意题目的数字最大是7 而能整除的只有 1,2,3,4,6,故构成的组合只能是1,2,4 或1,2,6或1,3,6,故分别统计1,2,3,4,6的个数,然后再分配 #include <iostr ...

  3. Codeforces Round #199 (Div. 2) B. Xenia and Spies

    B. Xenia and Spies time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. Codeforces Round #199 (Div. 2) C. Cupboard and Balloons

    C. Cupboard and Balloons time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  5. Codeforces Round #199 (Div. 2) D. Xenia and Dominoes

    把 'O' 看成 'X',然后枚举它的四个方向看看是否能放,然后枚举 $2^4$ 种可能表示每种方向是否放了,放了的话就标成 'X',就相当于容斥,对于新的图去dp. dp就是铺地砖,行用二进制来表示 ...

  6. Codeforces Round #515 (Div. 3)

    Codeforces Round #515 (Div. 3) #include<bits/stdc++.h> #include<iostream> #include<cs ...

  7. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  8. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  9. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

随机推荐

  1. jstl简介

    JavaServer Page Standard Tag Library是一个有用的JSP标签的集合,它封装了许多JSP应用程序通用的核心功能. JSTL支持常见的,结构性任务,如迭代和条件,标签为操 ...

  2. Dijkstra 算法、Kruskal 算法、Prim算法、floyd算法

    1.dijkstra算法 算最短路径的,算法解决的是有向图中单个源点到其他顶点的最短路径问题. 初始化n*n的数组. 2.kruskal算法 算最小生成树的,按权值加入 3.Prim算法 类似dijk ...

  3. centos6.5 64bit 实现root开机自动登录X桌面

    vim /etc/gdm/custom.conf 修改daemon节点,添加如下内容: AutomaticLoginEnable=true AutomaticLogin=root 重启计算机. 完.

  4. hdwiki 的模板和标签

    模版和标签 HDWiki模版标签可以让用户更方便.更容易的在页面中调用HDWiki的数据.        HDWiki的三种标签:1.循环标签 {hdwiki:doclist...}{/hdwiki} ...

  5. PMO终究什么样?(2)

    PMO终究什么样?(2) 接上一篇,继续聊一聊PMO终究什么样. 交给功用,8大典型职责 1监控.鉴定和陈述 项目处理单位从交给的角度一定要有监控鉴定.每个项目在关键的时期上它的发展是不是跟如期的一样 ...

  6. linux 时钟源初步分析linux kernel 时钟框架详细介绍

    初步概念: 看datasheet的关于时钟与定时器的部分, FCLK供给cpu, HCLK供给AHB总线设备(存储器控制器,中断控制器.LCD控制器.DMA.USB主机控制器等), PCLK供给APB ...

  7. 【转】MYSQL入门学习之一:基本操作

    转载地址:http://www.2cto.com/database/201212/173868.html 1.登录数据库    www.2cto.com       命令:mysql -u usern ...

  8. 利用Selenium自动化web测试

    简介: Selenium 是一个没有正式指导手册的开源项目,这让测试人员的问题调查很费时间.本文为基于 Selenium 1.0(发布于 2009 年 6 月)的测试期间的常见问题提供最佳实践. 简介 ...

  9. 我所了解的cgi(转)

    2014-08-25 09:01 by 掸尘, 4410 阅读, 6 评论, 收藏, 编辑 当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服 ...

  10. PowerDesigner连接SqlServer数据库