悲剧的div2。。。。。

A

题意:在n * m的矩形平面直角坐标系中,从(x, y)可以到四个点(x - a, y - b),(x + a, y - b),(x - a, y + b),(x + a, y + b)。给定坐标(x, y)和a, b, n, m,求该点走到矩形顶点( (1, m), (n, 1), (n, m), (1, 1)中任意一个)最少需要多少步。如果走不到,返回-1。

解法:枚举一下走到哪个顶点就行了。关键是有两个trick,一个是不能走出矩形边界,另一个是比如(3, 2),a = b = 1走不到(1, 1)。注意特判就好了。

tag:水题, trick

 /*
* Author: Plumrain
* Created Time: 2013-12-18 23:33
* File Name: A.cpp
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <list>
#include <deque>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <cctype>
#include <ctime>
#include <utility> using namespace std; #define CLR(x) memset(x, 0, sizeof(x))
#define PB push_back
#define SZ(v) ((int)(v).size())
#define ALL(t) t.begin(),t.end()
#define INF 999999999999
#define zero(x) (((x)>0?(x):-(x))<eps)
#define out(x) cout<<#x<<":"<<(x)<<endl
#define tst(a) cout<<#a<<endl
#define CINBEQUICKER std::ios::sync_with_stdio(false) const double eps = 1e-;
const double PI = atan(1.0)*;
const int maxint = ; typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<double> VD;
typedef pair<int, int> pii;
typedef long long int64; inline int Mymod (int a, int b) {int x=a%b; if(x<) x+=b; return x;} int n, m, x, y, a, b;
int gao(int x, int y, int ta, int tb)
{
int da = abs(x - ta), db = abs(y - tb);
if (da % a) return maxint;
if (db % b) return maxint; int t1 = da / a, t2 = db / b;
if (abs(t1-t2) & ) return maxint;
if (t1 == t2) return t1;
if (t1 < t2){
if (n < *a) return maxint;
return t2;
}
else{
if (m < *b) return maxint;
return t1;
}
} int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
// std::ios::sync_with_stdio(false);
while (cin >> n >> m >> x >> y >> a >> b){
int ans = min(gao(x, y, , ), gao(x, y, , m));
ans = min(ans, gao(x, y, n, m));
ans = min(ans, gao(x, y, n, ));
if (ans == maxint) cout << "Poor Inna and pony!" << endl;
else cout << ans << endl;
}
return ;
}

B

题意:给一个有'1' - '9'组成的字符串s,可以进行一种操作,就是如果s[i]-‘0’ + s[i+1]-‘0' == 9,可以在s中用'9'替换s[i]和s[i+1]。问在最终得到的字符串s含有9数量最多的前提下,最终操作完成后可能得到多少种字符串。s.size() <= 10^5。

解法:考虑连续几个和都为9的情况,比如34343,如果子串长度为偶数,则只有一种操作方法。否则,有(len+1) / 2种处理方法。每个子串的处理方法数相乘即为答案。

tag:水题

 /*
* Author: Plumrain
* Created Time: 2013-12-18 23:44
* File Name: B.cpp
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <list>
#include <deque>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <cctype>
#include <ctime>
#include <utility> using namespace std; #define CLR(x) memset(x, 0, sizeof(x))
#define PB push_back
#define SZ(v) ((int)(v).size())
#define ALL(t) t.begin(),t.end()
#define INF 999999999999
#define zero(x) (((x)>0?(x):-(x))<eps)
#define out(x) cout<<#x<<":"<<(x)<<endl
#define tst(a) cout<<#a<<endl
#define CINBEQUICKER std::ios::sync_with_stdio(false) const double eps = 1e-;
const double PI = atan(1.0)*;
const int maxint = ; typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<double> VD;
typedef pair<int, int> pii;
typedef long long int64; inline int Mymod (int a, int b) {int x=a%b; if(x<) x+=b; return x;} int64 two[];
int a[]; int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
// std::ios::sync_with_stdio(false);
two[] = ;
for (int i = ; i < ; ++ i)
two[i] = two[i-] * ; string s;
while (cin >> s){
int n = s.size();
for (int i = ; i < n; ++ i)
a[i] = s[i] - ''; int num = ;
int64 ans = ;
for (int i = ; i < n; ++ i){
if (a[i] + a[i-] == )
num ++;
else{
if (num > && num & ) ans *= (num/+);
num = ;
}
}
if (num > && num & ) ans *= (num/+);
cout << ans << endl;
} return ;
}

C

题意:一个由四个字符——D,I,M,A——组成的n*m的矩阵中,能从写有D的格子走到I,I走到M,M走到A,A走回D。可以从任意写有D的格子开始,问最多能走多少组DIMA。

解法:简单DFS加记忆化。比赛的时候sb了。。。

tag:DFS, memorization

方法比较裸,比完以后我就没补这道题了。

D

题意:给一个数组an[],然后读入一串数并维护以个队列。若读到0或1,则将它放在队尾;若读到-1,则找到最大的i使得an[i] <= len(当前队列的长度),然后同时在队列中删除位置为an[0], an[1]....an[i]的元素。问最终得到的队列是什么。an.size() <= 10^6,读入的一串数最多10^6,1 <= an[i] <= 10^6。

解法:比赛的时候我写了个用并查集的方法,后来发现是错的。好像可以用后缀数组来做,O(n*logn*logn)的方法。不过我不会。。。。还有神牛写了O(n)的方法。

   关键点在于:用扫一遍可以直到,每次将0/1放进去的时候,队列的长度是多少,也即是知道这个数放进去的位置在哪。又即是说,只要提前预处理出每个位置在放了数以后,需要多少个-1操作才能把这一位删掉,这个问题就能得到解决。至于具体操作细节,看代码。

tag:think, dp, good

 /*
* Author: Plumrain
* Created Time: 2013-12-24 14:19
* File Name: D.cpp
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector> using namespace std; #define clr0(x) memset(x, 0, sizeof(x))
#define pb push_back
#define sz(v) ((int)(v).size())
#define out(x) cout<<#x<<":"<<(x)<<endl
#define tst(a) cout<<a<<" "
const int inf = / ;
const int N = ;
typedef vector<int> vi; int n, m;
int opt[N];
int an[N], d[N], flag[N]; int bin_search(int x)
{
int l = , r = m-;
while (l <= r){
int mid = (l + r) >> ;
if (an[mid] <= x) l = mid + ;
else r = mid - ;
}
return r;
} int main()
{
while (scanf ("%d%d", &n, &m) != EOF){
clr0 (d); clr0 (flag);
for (int i = ; i < m; ++ i)
scanf ("%d", &an[i]);
int idx = , p = , num = ;
while (idx < m){
if (!idx && p != an[]) d[p] = inf;
else{
if (p == an[idx]){
d[p] = ;
++ num; ++ idx;
}
else d[p] = d[p-num] + ;
}
++ p;
}
for (int i = p; i <= ; ++ i)
d[i] = d[i-num] + ; int len = ;
for (int i = ; i < n; ++ i){
scanf ("%d", &opt[i]);
if (opt[i] == -) len -= + bin_search(len);
else flag[i] = d[++len];
}
vi v;
int cnt = ;
for (int i = n-; i >= ; -- i){
if (opt[i] == -) ++ cnt;
else if (flag[i] > cnt) v.pb (opt[i]);
} if (!sz(v)) printf ("Poor stack!");
else for (int i = sz(v)-; i >= ; -- i)
printf ("%d", v[i]);
printf ("\n");
}
return ;
}

E

没做。

CodeForces 220(div 2)的更多相关文章

  1. Codeforces #344 Div.2

    Codeforces #344 Div.2 Interview 题目描述:求两个序列的子序列或操作的和的最大值 solution 签到题 时间复杂度:\(O(n^2)\) Print Check 题目 ...

  2. Codeforces #345 Div.1

    Codeforces #345 Div.1 打CF有助于提高做题的正确率. Watchmen 题目描述:求欧拉距离等于曼哈顿距离的点对个数. solution 签到题,其实就是求有多少对点在同一行或同 ...

  3. Codeforces Beta Round #27 (Codeforces format, Div. 2)

    Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...

  4. codeforces 220 C. Game on Tree

    题目链接 codeforces 220 C. Game on Tree 题解 对于 1节点一定要选的 发现对于每个节点,被覆盖切选中其节点的概率为祖先个数分之一,也就是深度分之一 代码 #includ ...

  5. Codeforces#441 Div.2 四小题

    Codeforces#441 Div.2 四小题 链接 A. Trip For Meal 小熊维尼喜欢吃蜂蜜.他每天要在朋友家享用N次蜂蜜 , 朋友A到B家的距离是 a ,A到C家的距离是b ,B到C ...

  6. codeforces #592(Div.2)

    codeforces #592(Div.2) A Pens and Pencils Tomorrow is a difficult day for Polycarp: he has to attend ...

  7. codeforces #578(Div.2)

    codeforces #578(Div.2) A. Hotelier Amugae has a hotel consisting of 1010 rooms. The rooms are number ...

  8. codeforces #577(Div.2)

    codeforces #577(Div.2) A  Important Exam A class of students wrote a multiple-choice test. There are ...

  9. codeforces #332 div 2 D. Spongebob and Squares

    http://codeforces.com/contest/599/problem/D 题意:给出总的方格数x,问有多少种不同尺寸的矩形满足题意,输出方案数和长宽(3,5和5,3算两种) 思路:比赛的 ...

随机推荐

  1. 关于Android4.x系统默认显示方向各种修改

    1.设置属性值 在device.mk文件中加入PRODUCT_PROPERTY_OVERRIDES += \ ro.sf.hwrotation=180 2.设置屏幕默认显示方向 在frameworks ...

  2. Android App优化建议(转载)

    假如要Google Play上做一个最失败的案例,那最好的秘诀就是界面奇慢无比.耗电.耗内存.接下来就会得到用户的消极评论,最后名声也就臭了.即使你的应用设计精良.创意无限也没用. 耗电或者内存占用等 ...

  3. C语言中,如何通过socket得到对端IP地址

    struct sockaddr_in clientaddr1; memset(&clientaddr1, 0x00, sizeof(clientaddr1)); socklen_t nl=si ...

  4. 【转】UILabel、UITextView自适应得到高度

    原文:http://blog.csdn.net/xcysuccess3/article/details/8331549 在iOS中,经常遇到需要根据字符串的内容动态指定UILabel,UITextVi ...

  5. javascript基础学习(四)

    javascript之流程控制语句 学习要点: 表达式语句含义 选择语句:if.if...else.switch 循环语句:while.do...while.for.for...in 跳转语句:bre ...

  6. js字符串倒序

    有的时候我们需要把字符串倒序. 比如“范坚强”的倒序就是“强坚范”. 如何对字符串进行倒序呢?你首先想到的方法就是生成一个栈,从尾到头依次取出字符串中的字符压入栈中,然后把栈连接成字符串. var r ...

  7. js手机站跳转

    var yunzhuanhua_pc_domain = "http://www.域名.com#yht"; //PC站网址var yunzhuanhua_wap_domain = & ...

  8. wordpress 更改 "Home"为"首页"

    要怎麼更改wordpress的 menu上 那一直顯示著"首頁"的頁籤呢這問題我實在是找好久終於給我找到 在 wp-includes 的 post-template.php 這檔案 ...

  9. Caesar

    要求实现用户输入一个数改变26个字母的排列顺序 例如输入3: DEFGHIJKLMNOPQRSTUVWXYZABC 输入-3: XYZABCDEFGHIJKLMNOPQRSTUVW 使用循环链表 代码 ...

  10. JS:window.onload的使用介绍

    作者: 字体:[增加 减小] 类型:转载 时间:2013-11-13我要评论 window.onload在某些情况下还是比较实用的,比如加载时执行哪些脚本等等,下面有几个不错的示例,需要的朋友可以参考 ...