CodeForces Round 199 Div2
完了,这次做扯了,做的时候有点发烧,居然只做出来一道题,差点被绿.


# | When | Who | Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|---|---|---|
4434550 | Sep 9, 2013 11:57:20 AM | OIer | E - Xenia and Tree | GNU C++ | Accepted | 842 ms | 4260 KB |
4434547 | Sep 9, 2013 11:56:11 AM | OIer | E - Xenia and Tree | GNU C++ | Wrong answer on test 4 | 280 ms | 3400 KB |
4434544 | Sep 9, 2013 11:54:50 AM | OIer | E - Xenia and Tree | GNU C++ | Memory limit exceeded on test 4 | 966 ms | 262100 KB |
4434534 | Sep 9, 2013 11:50:15 AM | OIer | E - Xenia and Tree | GNU C++ | Memory limit exceeded on test 4 | 748 ms | 262100 KB |
4434506 | Sep 9, 2013 11:33:28 AM | OIer | E - Xenia and Tree | GNU C++ | Time limit exceeded on test 19 | 5000 ms | 4200 KB |
4434474 | Sep 9, 2013 11:15:59 AM | OIer | E - Xenia and Tree | GNU C++ | Accepted | 748 ms | 3600 KB |
4434179 | Sep 9, 2013 8:45:13 AM | OIer | D - Xenia and Dominoes | GNU C++ | Accepted | 30 ms | 600 KB |
4431354 | Sep 8, 2013 1:42:22 PM | OIer | C - Cupboard and Balloons | GNU C++ | Accepted | 30 ms | 0 KB |
4431256 | Sep 8, 2013 1:16:19 PM | OIer | C - Cupboard and Balloons | GNU C++ | Wrong answer on test 17 | 30 ms | 0 KB |
4431247 | Sep 8, 2013 1:14:03 PM | OIer | B - Xenia and Spies | GNU C++ | Accepted | 124 ms | 1200 KB |
4431244 | Sep 8, 2013 1:13:33 PM | OIer | B - Xenia and Spies | GNU C++ | Wrong answer on test 1 | 0 ms | 1300 KB |
4431210 | Sep 8, 2013 1:00:11 PM | OIer | B - Xenia and Spies | GNU C++ | Wrong answer on test 3 | 30 ms | 1100 KB |
Judgement protocol

# | When | Who | Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|---|---|---|
4424854 | Sep 7, 2013 1:53:25 PM | OIer | B - Xenia and Spies | GNU C++ | Wrong answer on pretest 2 | 30 ms | 1100 KB |
4424797 | Sep 7, 2013 1:52:36 PM | OIer | B - Xenia and Spies | GNU C++ | Wrong answer on pretest 1 | 0 ms | 1300 KB |
4422952 | Sep 7, 2013 1:21:08 PM | OIer | A - Xenia and Divisors | GNU C++ | Accepted | 30 ms | 400 KB |
4422863 | Sep 7, 2013 1:19:32 PM | OIer | C - Cupboard and Balloons | GNU C++ | Hacked | 30 ms | 0 KB |
4422366 | Sep 7, 2013 1:11:51 PM | OIer | C - Cupboard and Balloons | GNU C++ | Wrong answer on pretest 6 | 30 ms | 0 KB |
4420785 | Sep 7, 2013 12:50:12 PM | OIer | C - Cupboard and Balloons | GNU C++ | Wrong answer on pretest 6 | 30 ms | 0 KB |
4417237 | Sep 7, 2013 12:10:37 PM | OIer | A - Xenia and Divisors | GNU C++ | Hacked | 30 ms | 400 KB |
2 seconds
256 megabytes
standard input
standard output
Xenia the mathematician has a sequence consisting of n (n is divisible by 3) positive integers, each of them is at most 7. She wants to split the sequence into groups of three so that for each group of three a, b, c the following conditions held:
- a < b < c;
- a divides b, b divides c.
Naturally, Xenia wants each element of the sequence to belong to exactly one group of three. Thus, if the required partition exists, then it has groups of three.
Help Xenia, find the required partition or else say that it doesn't exist.
The first line contains integer n (3 ≤ n ≤ 99999) — the number of elements in the sequence. The next line contains n positive integers, each of them is at most 7.
It is guaranteed that n is divisible by 3.
If the required partition exists, print groups of three. Print each group as values of the elements it contains. You should print values in increasing order. Separate the groups and integers in groups by whitespaces. If there are multiple solutions, you can print any of them.
If there is no solution, print -1.
/*1 2 4
1 2 6
1 3 6*/
#include<stdio.h>
#include<string.h>
int a[],w[];
int N;
int main()
{
//freopen("input.txt","r",stdin);
while (scanf("%d",&N)!=EOF)
{
memset(w,,sizeof(w));
for (int i=;i<=N;i++)
{
scanf("%d",&a[i]);
w[a[i]]++;
}
if (w[]!=(N/) || w[]+w[]!=w[]+w[] || w[]<w[] || w[]<w[] || w[] || w[])
{
printf("-1\n");
continue;
}
for (int i=;i<=w[];i++) printf("1 2 4\n");
for (int i=;i<=w[]-w[];i++) printf("1 2 6\n");
for (int i=;i<=w[];i++) printf("1 3 6\n");
}
return ;
}
2 seconds
256 megabytes
standard input
standard output
Xenia the vigorous detective faced n (n ≥ 2) foreign spies lined up in a row. We'll consider the spies numbered from 1 to n from left to right.
Spy s has an important note. He has to pass the note to spy f. Xenia interrogates the spies in several steps. During one step the spy keeping the important note can pass the note to one of his neighbours in the row. In other words, if this spy's number is x, he can pass the note to another spy, either x - 1 or x + 1 (if x = 1 or x = n, then the spy has only one neighbour). Also during a step the spy can keep a note and not pass it to anyone.
But nothing is that easy. During m steps Xenia watches some spies attentively. Specifically, during step ti (steps are numbered from 1) Xenia watches spies numbers li, li + 1, li + 2, ..., ri (1 ≤ li ≤ ri ≤ n). Of course, if during some step a spy is watched, he can't do anything: neither give the note nor take it from some other spy. Otherwise, Xenia reveals the spies' cunning plot. Nevertheless, if the spy at the current step keeps the note, Xenia sees nothing suspicious even if she watches him.
You've got s and f. Also, you have the steps during which Xenia watches spies and which spies she is going to watch during each step. Find the best way the spies should act in order to pass the note from spy s to spy f as quickly as possible (in the minimum number of steps).
The first line contains four integers n, m, s and f (1 ≤ n, m ≤ 105; 1 ≤ s, f ≤ n; s ≠ f; n ≥ 2). Each of the following m lines contains three integers ti, li, ri (1 ≤ ti ≤ 109, 1 ≤ li ≤ ri ≤ n). It is guaranteed that t1 < t2 < t3 < ... < tm.
Print k characters in a line: the i-th character in the line must represent the spies' actions on step i. If on step i the spy with the note must pass the note to the spy with a lesser number, the i-th character should equal "L". If on step i the spy with the note must pass it to the spy with a larger number, the i-th character must equal "R". If the spy must keep the note at the i-th step, the i-th character must equal "X".
As a result of applying the printed sequence of actions spy s must pass the note to spy f. The number of printed characters k must be as small as possible. Xenia must not catch the spies passing the note.
If there are miltiple optimal solutions, you can print any of them. It is guaranteed that the answer exists.
#include<stdio.h>
#include<string.h>
int cur,dir,CT;
int T[],L[],R[];
void go()
{
if (dir==) putchar('R');
else putchar('L');
cur+=dir;
}
int main()
{
int N,M,S,F;
while (scanf("%d%d%d%d",&N,&M,&S,&F)!=EOF)
{
memset(T,,sizeof(T));
for (int i=;i<=M;i++) scanf("%d%d%d",&T[i],&L[i],&R[i]);
cur=S,dir=S<F ? :-,CT=;
for (int i=;i<=0x7FFFFFFF;i++)
{
if (cur==F) break;
if (i==T[CT])
{
if ((L[CT]<=cur && cur<=R[CT]) || (L[CT]<=cur+dir && cur+dir<=R[CT])) putchar('X');
else go();
CT++;
}
else go();
}
printf("\n");
}
return ;
}
2 seconds
256 megabytes
standard input
standard output
A girl named Xenia has a cupboard that looks like an arc from ahead. The arc is made of a semicircle with radius r (the cupboard's top) and two walls of height h (the cupboard's sides). The cupboard's depth is r, that is, it looks like a rectangle with base r and height h + r from the sides. The figure below shows what the cupboard looks like (the front view is on the left, the side view is on the right).
Xenia got lots of balloons for her birthday. The girl hates the mess, so she wants to store the balloons in the cupboard. Luckily, each balloon is a sphere with radius . Help Xenia calculate the maximum number of balloons she can put in her cupboard.
You can say that a balloon is in the cupboard if you can't see any part of the balloon on the left or right view. The balloons in the cupboard can touch each other. It is not allowed to squeeze the balloons or deform them in any way. You can assume that the cupboard's walls are negligibly thin.
The single line contains two integers r, h (1 ≤ r, h ≤ 107).
Print a single integer — the maximum number of balloons Xenia can put in the cupboard.
#include<math.h>
#include<stdio.h>
int main()
{
int R,H;
while (scanf("%d%d",&R,&H)!=EOF)
{
int ans=H/R*;
H-=ans*R/;
if (H*<R) ans++;
else
{
if ((double)(*H)<sqrt(3.0)*(double)R) ans+=;
else ans+=;
}
printf("%d\n",ans);
}
return ;
}
2 seconds
256 megabytes
standard input
standard output
Xenia likes puzzles very much. She is especially fond of the puzzles that consist of domino pieces. Look at the picture that shows one of such puzzles.
A puzzle is a 3 × n table with forbidden cells (black squares) containing dominoes (colored rectangles on the picture). A puzzle is called correct if it meets the following conditions:
- each domino occupies exactly two non-forbidden cells of the table;
- no two dominoes occupy the same table cell;
- exactly one non-forbidden cell of the table is unoccupied by any domino (it is marked by a circle in the picture).
To solve the puzzle, you need multiple steps to transport an empty cell from the starting position to some specified position. A move is transporting a domino to the empty cell, provided that the puzzle stays correct. The horizontal dominoes can be moved only horizontally, and vertical dominoes can be moved only vertically. You can't rotate dominoes. The picture shows a probable move.
Xenia has a 3 × n table with forbidden cells and a cell marked with a circle. Also, Xenia has very many identical dominoes. Now Xenia is wondering, how many distinct correct puzzles she can make if she puts dominoes on the existing table. Also, Xenia wants the circle-marked cell to be empty in the resulting puzzle. The puzzle must contain at least one move.
Help Xenia, count the described number of puzzles. As the described number can be rather large, print the remainder after dividing it by 1000000007 (109 + 7).
The first line contains integer n (3 ≤ n ≤ 104) — the puzzle's size. Each of the following three lines contains n characters — the description of the table. The j-th character of the i-th line equals "X" if the corresponding cell is forbidden; it equals ".", if the corresponding cell is non-forbidden and "O", if the corresponding cell is marked with a circle.
It is guaranteed that exactly one cell in the table is marked with a circle. It is guaranteed that all cells of a given table having at least one common point with the marked cell is non-forbidden.
Print a single number — the answer to the problem modulo 1000000007 (109 + 7).
题意:有一个3*n的矩形,除其中标为X或O的点之外的点用1*2的矩形覆盖,求有多少种发难.要求标为O的点周围存在可以移动的1*2矩形.
思路:位DP?还是状态压缩?我不太清楚这分类.f[i][j]表示填充到第i列,状态为j的方案数.其中j∈[0,7],其二进制表示第k行是否被占用.因为O点周围必须有能移动的小矩形,所以枚举小矩形的位置,分别有可能在左右或下.然后用容斥原理排除多余解.
#include<stdio.h>
#include<string.h>
const __int64 MOD=;
__int64 dp[][];
char ch[][];
int N;
__int64 DP()
{
memset(dp,,sizeof(dp));
dp[][]=;
for (int i=;i<N;i++)
for (int j=;j<;j++)
{
bool v[];
for (int k=;k<;k++)
{
v[k]=j >> k & ^ ;
if (ch[k][i]=='X')
{
if (v[k]==false) dp[i][j]=;
v[k]=false;
}
}
if (dp[i][j]==) continue;
if (v[])
{
if (v[])
{
if (v[])
{
(dp[i+][]+=dp[i][j])%=MOD;
(dp[i+][]+=dp[i][j])%=MOD;
(dp[i+][]+=dp[i][j])%=MOD;
}
else
{
(dp[i+][]+=dp[i][j])%=MOD;
(dp[i+][]+=dp[i][j])%=MOD;
}
}
else
{
if (v[])
{
(dp[i+][]+=dp[i][j])%=MOD;
}
else
{
(dp[i+][]+=dp[i][j])%=MOD;
}
}
}
else
{
if (v[])
{
if (v[])
{
(dp[i+][]+=dp[i][j])%=MOD;
(dp[i+][]+=dp[i][j])%=MOD;
}
else
{
(dp[i+][]+=dp[i][j])%=MOD;
}
}
else
{
if (v[])
{
(dp[i+][]+=dp[i][j])%=MOD;
}
else
{
(dp[i+][]+=dp[i][j])%=MOD;
}
}
}
}
return (dp[N][]);
}
int main()
{
int sx,sy;
while (scanf("%d",&N)!=EOF)
{
for (int i=;i<;i++) scanf("%s",ch[i]);
for (int i=;i<;i++)
for (int j=;j<N;j++)
if (ch[i][j]=='O')
{
sx=i;
sy=j;
ch[i][j]='X';
}
if (sx==)
{
for (int i=;i<N;i++)
{
char tmp=ch[][i];
ch[][i]=ch[][i];
ch[][i]=tmp;
}
sx=;
}
ch[][N]=ch[][N]=ch[][N]='X';
bool f1=false,f2=false,f3=false;
__int64 ans=;
if (sy> && ch[sx][sy-]=='.' && ch[sx][sy-]=='.')
{
f1=true;
ch[sx][sy-]=ch[sx][sy-]='X';
ans=(ans+DP())%MOD;
ch[sx][sy-]=ch[sx][sy-]='.';
}
if (sy<N- && ch[sx][sy+]=='.' && ch[sx][sy+]=='.')
{
f2=true;
ch[sx][sy+]=ch[sx][sy+]='X';
ans=(ans+DP())%MOD;
ch[sx][sy+]=ch[sx][sy+]='.';
}
if (sx== && ch[sx+][sy]=='.' && ch[sx+][sy]=='.')
{
f3=true;
ch[sx+][sy]=ch[sx+][sy]='X';
ans=(ans+DP())%MOD;
ch[sx+][sy]=ch[sx+][sy]='.';
}
if (f1 && f2)
{
ch[sx][sy-]=ch[sx][sy-]=ch[sx][sy+]=ch[sx][sy+]='X';
ans=(ans+MOD-DP())%MOD;
ch[sx][sy-]=ch[sx][sy-]=ch[sx][sy+]=ch[sx][sy+]='.';
}
if (f1 && f3)
{
ch[sx][sy-]=ch[sx][sy-]=ch[sx+][sy]=ch[sx+][sy]='X';
ans=(ans+MOD-DP())%MOD;
ch[sx][sy-]=ch[sx][sy-]=ch[sx+][sy]=ch[sx+][sy]='.';
}
if (f2 && f3)
{
ch[sx][sy+]=ch[sx][sy+]=ch[sx+][sy]=ch[sx+][sy]='X';
ans=(ans+MOD-DP())%MOD;
ch[sx][sy+]=ch[sx][sy+]=ch[sx+][sy]=ch[sx+][sy]='.';
}
if (f1 && f2 && f3)
{
ch[sx][sy-]=ch[sx][sy-]=ch[sx][sy+]=ch[sx][sy+]=ch[sx+][sy]=ch[sx+][sy]='X';
ans=(ans+DP())%MOD;
ch[sx][sy-]=ch[sx][sy-]=ch[sx][sy+]=ch[sx][sy+]=ch[sx+][sy]=ch[sx+][sy]='.';
}
printf("%I64d\n",ans);
}
return ;
}
5 seconds
256 megabytes
standard input
standard output
Xenia the programmer has a tree consisting of n nodes. We will consider the tree nodes indexed from 1 to n. We will also consider the first node to be initially painted red, and the other nodes — to be painted blue.
The distance between two tree nodes v and u is the number of edges in the shortest path between v and u.
Xenia needs to learn how to quickly execute queries of two types:
- paint a specified blue node in red;
- calculate which red node is the closest to the given one and print the shortest distance to the closest red node.
Your task is to write a program which will execute the described queries.
The first line contains two integers n and m (2 ≤ n ≤ 105, 1 ≤ m ≤ 105) — the number of nodes in the tree and the number of queries. Next n - 1 lines contain the tree edges, the i-th line contains a pair of integers ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — an edge of the tree.
Next m lines contain queries. Each query is specified as a pair of integers ti, vi (1 ≤ ti ≤ 2, 1 ≤ vi ≤ n). If ti = 1, then as a reply to the query we need to paint a blue node vi in red. If ti = 2, then we should reply to the query by printing the shortest distance from some red node to node vi.
It is guaranteed that the given graph is a tree and that all queries are correct.
For each second type query print the reply in a single line.
1 2
2 3
2 4
4 5
2 1
2 5
1 2
2 5
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
int x,step,pre;
};
int d[];
vector<int> G[];
bool col[];
void bfs(int s)
{
queue<int> q;
while (!q.empty()) q.pop();
q.push(s);
d[s]=;
col[s]=true;
while (!q.empty())
{
int x=q.front();
q.pop();
for (int i=;i<G[x].size();i++)
{
int v=G[x][i];
if (d[v]>d[x]+)
{
d[v]=d[x]+;
q.push(v);
}
}
}
}
int BFS(int s)
{
if (col[s]) return ;
queue<node> q;
while (!q.empty()) q.pop();
node S;
S.x=s;
S.step=;
S.pre=;
q.push(S);
while (!q.empty())
{
S=q.front();
q.pop();
for (int i=;i<G[S.x].size();i++)
{
int v=G[S.x][i];
if (v==S.pre) continue;
if (col[v]) return S.step+;
else
{
node tmp;
tmp.x=v;
tmp.step=S.step+;
tmp.pre=S.x;
q.push(tmp);
}
}
}
}
int main()
{
int N,M;
while (scanf("%d%d",&N,&M)!=EOF)
{
for (int i=;i<=N;i++) G[i].clear();
for (int i=;i<N;i++)
{
int x,y;
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
for (int i=;i<=N;i++) d[i]=0x7FFFFFFF;
memset(col,false,sizeof(col));
col[]=true;
bfs();
int cnt=;
for (int i=;i<=M;i++)
{
int Q,P;
scanf("%d%d",&Q,&P);
if (Q==)
{
cnt++;
if (cnt<) bfs(P);
else col[P]=true;
}
else
{
if (cnt<) printf("%d\n",d[P]);
else printf("%d\n",BFS(P));
}
}
}
return ;
}
CodeForces Round 199 Div2的更多相关文章
- Codeforces Round #539 div2
Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...
- 【前行】◇第3站◇ Codeforces Round #512 Div2
[第3站]Codeforces Round #512 Div2 第三题莫名卡半天……一堆细节没处理,改一个发现还有一个……然后就炸了,罚了一啪啦时间 Rating又掉了……但是没什么,比上一次好多了: ...
- Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...
- Codeforces Round #564(div2)
Codeforces Round #564(div2) 本来以为是送分场,结果成了送命场. 菜是原罪 A SB题,上来读不懂题就交WA了一发,代码就不粘了 B 简单构造 很明显,\(n*n\)的矩阵可 ...
- Codeforces Round #361 div2
ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...
- Codeforces Round #626 Div2 D,E
比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...
- CodeForces Round 192 Div2
This is the first time I took part in Codeforces Competition.The only felt is that my IQ was contemp ...
- CodeForces Round 200 Div2
这次比赛出的题真是前所未有的水!只用了一小时零十分钟就过了前4道题,不过E题还是没有在比赛时做出来,今天上午我又把E题做了一遍,发现其实也很水.昨天晚上人品爆发,居然排到Rank 55,运气好的话没准 ...
- Codeforces Round #359 div2
Problem_A(CodeForces 686A): 题意: \[ 有n个输入, +\space d_i代表冰淇淋数目增加d_i个, -\space d_i表示某个孩纸需要d_i个, 如果你现在手里 ...
随机推荐
- 改变edittext边框颜色
转载自:点击打开链接 第一步:为了更好的比较,准备两个一模一样的EditText(当Activity启动时,焦点会在第一个EditText上,如果你不希望这样只需要写一个高度和宽带为0的EditTex ...
- UNITY3D与iOS交互解决方案
原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 “授人以鱼,不如授人以渔”,以UNIT ...
- UIImage imageNamed和UIImage imageWithContentsOfFile区别
UIImage imageNamed和 [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageNam ...
- 在link的url里新增参数
(文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) <%= link_to image_tag("/images/icons/aaa. ...
- [BZOJ3786]星系探索
[BZOJ3786]星系探索 试题描述 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个 ...
- 【转】基于注解的SpirngMVC简单介绍
转载地址:http://haohaoxuexi.iteye.com/blog/1343761 SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是 Di ...
- 七维互联(www.7wei.com)
七维互联 http://www.7wei.com/ 黄云贵的Delphi http://www.cnblogs.com/huangygdelphi/articles/2232171.htm ...
- C#/Java/C/C++基本类型所占大小及表示范围
C/C++的数据类型: 一,整型 Turbo C: [signed] int 2Byte//有符号数,-32768~32767 unsigned int 2Byte //无符号数,只能表示整数 ...
- Cocos2d-JS场景树
场景树概念(Scene Graph) 场景树是Cocos2d-JS中用来管理场景中所有元素的一个数据结构,场景树之所以被称为一棵树是因为它将一个场景的所有子结点以树状图的形式组织在一起. Cocos2 ...
- Cocos2d-JS的屏幕适配方案
Cocos2d引擎为游戏开发者提供了屏幕适配策略(Resolution Policy)解决方案. 使用方式 1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolut ...