A. Two Substrings

题意:给一个字符串,求是否含有不重叠的子串"AB"和"BA",长度1e5。

题解:看起来很简单,但是一直错,各种考虑不周全,最后只能很蠢的暴力,把所有的AB和BA的位置求出来,能有一对AB和BA不重叠即可。

 #include <bits/stdc++.h>
using namespace std; char a[];
vector<int> ab;
vector<int> ba;
int main()
{
while (~scanf("%s", a)) {
int len = strlen(a);
ab.clear();
ba.clear(); for (int i = ; i < len - ; ++i) {
if (a[i] == 'A' && a[i + ] == 'B') {
ab.push_back(i);
}
if (a[i] == 'B' && a[i + ] == 'A') {
ba.push_back(i);
}
} if (ab.size() == || ba.size() == ) {
puts("NO");
} else if (ab.size() > && ba.size() > ) {
puts("YES");
} else {
int flag = false;
for (int i = ; i < ab.size(); ++i) {
for (int j = ; j < ba.size(); ++j) {
if (!(ab[i] + == ba[j]) && !(ab[i] - == ba[j])) flag = true;
}
}
if (flag) puts("YES");
else puts("NO");
}
}
return ;
}

B. Preparing Olympiad

题意:输入n, l, r, x,代表有n题,每题有一个难度,选其中部分题(大于2题),要求难度和在[l, r]之间,最大难度最小难度的差不超过x。1 ≤ n ≤ 15

题解:暴力,dfs求全部情况。复杂度2^15

#include <bits/stdc++.h>

using namespace std;

int a[];
int n, l, r, x;
int vis[];
int ans; bool ok()
{
int cnt = ;
for (int i = ; i < n; ++i) if (vis[i]) cnt++;
if (cnt < ) return false;
int low = ;
int high = ;
int sum = ;
for (int i = ; i < n; ++i) {
if (!vis[i]) continue;
low = min(low, a[i]);
high = max(high, a[i]);
sum += a[i];
}
if (high - low >= x && sum <= r && sum >= l) return true;
return false;
} void dfs(int pos)
{
if (pos == n) {
if (ok()) ans++;
return ;
}
vis[pos] = ;
dfs(pos + );
vis[pos] = ;
dfs(pos + );
} int main()
{
while (cin >> n >> l >> r >> x) {
for (int i = ; i < n; ++i) cin >> a[i];
ans = ;
dfs();
cout << ans << endl;
}
return ;
}

C. Divisibility by Eight

题意:给一个不超过100位的没有前导零的非负整数,问可不可能移出一部分数字,事剩下至少一位非负整数能被8整除。

题解:能被8整除的数有一个特性:一个整数的末3位若能被8整除,则该数一定能被8整除。求出所有的三位以内能被8整除的数,分别试一下就ok了。

 #include <bits/stdc++.h>
using namespace std; int ans[];
char a[];
//一个整数的末3位若能被8整除,则该数一定能被8整除。
bool ok(int x)
{
int num[];
int cnt = ;
while (x) {
num[cnt++] = x % ;
x /= ;
}
reverse(num, num + cnt);
int len = strlen(a);
int pos = ;
int i;
for (i = ; i < cnt; ++i) {
while (a[pos] - '' != num[i] && pos < len) {
pos++;
}
if (pos >= len) break;pos++;
}
if (i == cnt) return true;
return false;
} int main()
{
int idx = ;
ans[] = ;
for (int i = ; i < ; ++i) {
if (i * > ) break;
ans[idx++] = i * ;
} scanf("%s", a);
for (int i = ; i < idx; ++i) {
if (ok(ans[i])) {
printf("YES\n%d\n", ans[i]);
return ;
}
}
int len = strlen(a);
for (int i = ; i < len; ++i) {
if (a[i] == '') {
printf("YES\n0\n");
return ;
}
}
printf("NO\n"); return ;
}

D. Regular Bridge (构造)

题意:给一个k(1 ≤ k ≤ 100) ,问是否存在一个无向图至少有一个桥且所有点的度都是k。如果存在给出任意一种解。

题解:对于k+1个点的完全图,所有点的度都是k。考虑两堆k+1的点,然后再用两个点组成桥,每个点和其中一个堆连k-1就可以了。每次桥上的点连堆中两个点,然后删除这两个点的连线,度数不变。同时也可以发现只有k-1为偶数是,即k为奇数时才有解。

 #include <cstdio>

 using namespace std;

 int main()
{
int k;
while (~scanf("%d", &k)) {
if ((k & ) == ) {
puts("NO");
} else if (k == ) {
puts("YES\n2 1\n1 2");
} else {
puts("YES");
printf("%d %d\n", * k + , k * k + * k);
for (int i = ; i < k; ++i) {
printf("%d %d\n", * k + , i);
printf("%d %d\n", * k + , i + k + );
}
printf("%d %d\n", * k + , * k + );
for (int i = ; i <= k + ; ++i) {
for (int j = i + ; j <= k + ; ++j) {
if (i < k - && (i & ) && i + == j) continue;
printf("%d %d\n", i, j);
printf("%d %d\n", k + + i, k + + j);
}
}
}
}
return ;
}

E. Brackets in Implications(构造)

题意:给定01间运算0->0=1  0->1=1  1->0=0  1->1=1 默认从左到右运算 问能不能通过加括号使得表达式值变为0

题解:很容易发现最后一位必须是0,倒数第二位如果是1,那么不用加括号直接为0。如果倒数第二位为0,那么需要在前面找到一个0,两个0即中间的1组成1,然后同上。两个0和中间的1组成1的方法可以为(0(11...110))。

 #include <iostream>
#include <stdio.h> using namespace std; int a[];
int n;
int main()
{
cin >> n;
for (int i = ; i < n; ++i)
scanf("%d", a + i); if (n == ) {
if (a[] == ) puts("YES\n0");
else puts("NO");
} else if (n == ) {
if (a[] == && a[] == ) puts("YES\n1->0");
else puts("NO");
} else if (a[n - ] == ) {
puts("NO");
} else {
if (a[n - ] == ) {
puts("YES");
for (int i = ; i < n - ; ++i) {
printf("%d->", a[i]);
}
puts("");
} else {
int pos = -;
for (int i = n - ; i >= ; --i) {
if (a[i] == ) {
pos = i;
break;
}
}
if (pos == -) puts("NO");
else {
puts("YES");
for (int i = ; i < pos; ++i) {
printf("%d->", a[i]);
}
printf("(0->(");
for (int i = pos + ; i < n - ; ++i) {
printf("%d->", a[i]);
}
puts("0))->0");
}
}
}
return ;
}

Codeforces Round #306 (Div. 2) ABCDE(构造)的更多相关文章

  1. Codeforces Round #261 (Div. 2)[ABCDE]

    Codeforces Round #261 (Div. 2)[ABCDE] ACM 题目地址:Codeforces Round #261 (Div. 2) A - Pashmak and Garden ...

  2. 数学/找规律/暴力 Codeforces Round #306 (Div. 2) C. Divisibility by Eight

    题目传送门 /* 数学/暴力:只要一个数的最后三位能被8整除,那么它就是答案:用到sprintf把数字转移成字符读入 */ #include <cstdio> #include <a ...

  3. DFS Codeforces Round #306 (Div. 2) B. Preparing Olympiad

    题目传送门 /* DFS: 排序后一个一个出发往后找,找到>r为止,比赛写了return : */ #include <cstdio> #include <iostream&g ...

  4. 水题 Codeforces Round #306 (Div. 2) A. Two Substrings

    题目传送门 /* 水题:遍历一边先找AB,再BA,再遍历一边先找BA,再AB,两种情况满足一种就YES */ #include <cstdio> #include <iostream ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #306 (Div. 2) E. Brackets in Implications 构造

    E. Brackets in Implications Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/conte ...

  7. Codeforces Round #306 (Div. 2) D. Regular Bridge 构造

    D. Regular Bridge Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/550/pro ...

  8. Codeforces Round #306 (Div. 2)A B C D 暴力 位/暴力 暴力 构造

    A. Two Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  9. Codeforces Round #306 (Div. 2) C. Divisibility by Eight 暴力

    C. Divisibility by Eight Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/ ...

随机推荐

  1. 我的PHP之旅--认识数据库及数据库操作

    数据库基本知识 什么是数据库服务器:安装了数据库软件的电脑,就是数据库服务器,同理安装了Apache软件的电脑就是www服务器. 什么是DBMS:database management system( ...

  2. 计算器(console version)

    题目描述 请用python编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 输入描述 数字包括& ...

  3. 关于c++字符串的while(*temp++)

    首先,上一段代码 static bool reverse_str(const char *str) { const char *temp=str; while(*temp++); temp-=; // ...

  4. 递归解析XML

    package com.app.test; import java.io.InputStream; import java.util.List; import org.dom4j.Attribute; ...

  5. Win7 & Win 8系统更新失败的解决

    转自:Win 8系统更新失败的解决(原创) 这几天win 8又出了一大堆更新,而且是一更新完就要重启,重启之后照例要进入更新包的安装过程.不爽的是,屡屡在重启后出现"配置Windows更新失 ...

  6. MAC下《暗黑世界》客户端版本编译说明!!

    原地址:http://blog.csdn.net/uxqclm/article/details/11970659 2013-09-24 12:02 161人阅读 评论(0) 收藏 举报   目录(?) ...

  7. 这个帖子要收藏,以后用得着--python 实时获取子进程输出

    在论坛上找到方法了,http://bbs.csdn.net/topics/340234292 http://blog.csdn.net/junshao90/article/details/821575 ...

  8. CSS margin 属性

    设置外边距的最简单的方法就是使用 margin 属性. margin 属性接受任何长度单位,可以是像素.英寸.毫米或 em. margin 可以设置为 auto.更常见的做法是为外边距设置长度值.下面 ...

  9. 将手机micro USB口转换为USB type C连接器的低成本方案

    我们知道USB IF提出的type C连接器的终极目标是统一各种USB 接口. 尽管USB 3.0在PC市场上发展的风生水起,但是由于USB 3.0对手机4G LTE的EMI和RFI干扰,导致市场上除 ...

  10. 图片缩放时java.lang.IllegalArgumentException: pointerIndex out of range解决方案

    版权声明:本文为博主原创文章,未经博主允许不得转载. 06-03 20:45:24.143: E/AndroidRuntime(1230): FATAL EXCEPTION: main06-03 20 ...