A

直接判存不存在连续的三个包含A,B,C就行

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e5 + ;
const int MAXQ = ;
int sum[];
char f[];
int main()
{
ios_base::sync_with_stdio();
cin.tie(); string a;
cin >> a;
int len=a.size();
for (int i = ; i < a.size(); i++)
{
int l = max(i - , );
int r = min(len - , i + );
if (a[i] == 'A')
{
for (int j = l; j <= r; j++)
{
sum[j] += ;
}
}
else if (a[i] == 'B')
{
for (int j = l; j <= r; j++)
{
sum[j] += ;
}
}
else if (a[i] == 'C')
{
for (int j = l; j <= r; j++)
{
sum[j] += ;
}
}
}
for (int i = ; i < a.size(); i++)
{
if (sum[i] == )
{
cout << "Yes" << endl;
return ;
}
}
cout << "No" << endl;
return ;
}

B

下列情况有答案

1.f[i]!=f[i-p]

2.f[i]=f[i-p]='.'

3.f[i]!='.'&&f[i-p]='.'或者f[i]='.'&&f[i-p]!='.'

不是这几种情况直接输出NO即可 是的话 先构造出一处然后剩下的随便赋值了

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e5 + ;
const int MAXQ = ;
int sum[];
char f[];
int main()
{
ios_base::sync_with_stdio();
cin.tie(); int flag = ;
int n, p;
scanf("%d %d", &n, &p);
scanf("%s", f + );
for (int i = p + ; i <= n; i++)
{
if (f[i] == '.')
{
if (f[i - p] != '.')
{
if (f[i - p] == '')
{
f[i] = '';
}
else
{
f[i] = '';
}
flag = ;
}
else
{
f[i] = '';
f[i - p] = '';
flag = ;
}
}
else
{
if (f[i - p] == '.')
{
if (f[i] == '')
{
f[i - p] = '';
}
else
{
f[i - p] = '';
}
flag = ;
}
else
{
if (f[i] != f[i - p])
{
flag = ;
}
}
}
}
for (int i = ; i <= n; i++)
{
if (f[i] == '.')
{
f[i] = '';
}
}
if (!flag)
{
cout << "No" << endl;
}
else
{
printf("%s\n", f + );
}
}

C

构造题

直接搞个48*50的大块 分成4个12*50的小块

再满足条件地在大块里面扣一个个1*1的小块即可

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e5 + ;
const int MAXQ = ;
int sum[];
char f[][];
int main()
{
ios_base::sync_with_stdio();
cin.tie(); int a, b, c, d;
cin >> a >> b >> c >> d;
cout << << " " << << endl;
for (int i = ; i <= ; i++)
{
for (int j = ; j <= ; j++)
{
if (i <= )
{
f[i][j] = 'A';
}
else if (i <= )
{
f[i][j] = 'B';
}
else if (i <= )
{
f[i][j] = 'C';
}
else
{
f[i][j] = 'D';
}
}
}
a--, b--, c--, d--;
int dx = , dy = ;
for (int i = ; i <= a; i++)
{
if (dy > )
{
dy -= , dx += ;
}
f[dx][dy] = 'A';
dy+=;
}
dx=,dy=;
for (int i = ; i <= b; i++)
{
if (dy > )
{
dy -= , dx += ;
}
f[dx][dy] = 'B';
dy+=;
}
dx=,dy=;
for (int i = ; i <= c; i++)
{
if (dy > )
{
dy -= , dx += ;
}
f[dx][dy] = 'C';
dy+=;
}
dx=,dy=;
for (int i = ; i <= d; i++)
{
if (dy > )
{
dy -= , dx += ;
}
f[dx][dy] = 'D';
dy+=;
}
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
cout<<f[i][j];
}
cout<<endl;
}
}

D

题意:

给你n块云(1<=n<=1e5) 每块云的长度是确定的L 月亮在原点 每块云覆盖的区间为[Xi,Xi+L](-1e8<=Xi<=1e8) 初始每块云的速度是1或者-1

现在给你一个Wmax 你可以选择一个速度W(-Wmax<=W<=Wmax)使得有一对云在某一个时间同时覆盖住月亮

问你可以由多少对

解:

http://codeforces.com/blog/entry/59968

把X轴上再加一条Y轴表示时间 这样某一块云运动的轨迹就变成了一个斜着的条

如果两个云有交集的话 在图上就变成有一个公共的小蓝方块

接着我们把W的速度转给月亮 而不是给云 这样云的速度就不变 方便思考和计算

如果一对云可以同时遮到月亮的话 小蓝方块与黄色月亮运动范围是有交集的 即小蓝方块的最高点Y坐标大于下界斜率*当前横坐标

因为1<=W<=Wmax 所以月亮下界的斜率最小为1/Wmax 假设有一个往左的云u 有一个往右的云v 可以算出他们的小蓝块的最高点坐标为((Xu+Xv+L)/2,(Xu-Xv+L)/2)

接下来的要求即是解不等式  把Xu+Xv+L分>=0与<0两种情况讨论即可

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e5 + ;
const int MAXQ = ;
int n, l, w;
int x[MAXN], v[MAXN];
vector<int> pos, neg;
inline int div_floor(ll a, int b)
{
if (b == )
{
if (a > )
{
return INT_MAX;
}
else
{
return INT_MAX * -;
}
}
if (a % b < )
{
a -= (b + a % b);
}
return a / b;
}
int main()
{
scanf("%d %d %d", &n, &l, &w);
for (int i = ; i < n; i++)
{
scanf("%d %d", &x[i], &v[i]);
if (v[i] == )
{
pos.push_back(x[i]);
}
else
{
neg.push_back(x[i]);
}
}
sort(pos.begin(), pos.end()), sort(neg.begin(), neg.end());
ll anser = ;
for (int v : neg)
{
auto barrier = lower_bound(pos.begin(), pos.end(), -v - l);
int ansmax0 = div_floor(1LL * (v + l) * (w + ) - , w - );
int ansmax1 = div_floor(1LL * (v + l) * (w - ) - , w + );
anser += (upper_bound(pos.begin(), barrier, ansmax0) - pos.begin()) + (upper_bound(barrier, pos.end(), min(v, ansmax1)) - barrier);
}
printf("%lld\n", anser);
}

E

待补

Codeforces 989 P循环节01构造 ABCD连通块构造 思维对云遮月参考系坐标轴转换的更多相关文章

  1. P1141 01迷宫 dfs连通块

    题目描述 有一个仅由数字000与111组成的n×nn \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻444格中的某一格111上,同样若你位于一格1上,那么你可以移动到相邻444格 ...

  2. P1141 01迷宫(连通块模板)

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...

  3. Codeforces Round #222 (Div. 1) Maze —— dfs(连通块)

    题目链接:http://codeforces.com/problemset/problem/377/A 题解: 有tot个空格(输入时统计),把其中k个空格变为wall,问怎么变才能使得剩下的空格依然 ...

  4. Codeforces 920E-Connected Components? (set,补图,连通块)

    Connected Components? CodeForces - 920E You are given an undirected graph consisting of n vertices a ...

  5. Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location 扩展欧几里得方块内光线反射

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  6. Codeforces Round #117 (Div. 2) D.Common Divisors(KMP最小循环节)

    http://codeforces.com/problemset/problem/182/D 题意:如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S ...

  7. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...

  8. Common Divisors CodeForces - 182D || kmp最小循环节

    Common Divisors CodeForces - 182D 思路:用kmp求next数组的方法求出两个字符串的最小循环节长度(http://blog.csdn.net/acraz/articl ...

  9. Codeforces Round #383 (Div. 2) A,B,C,D 循环节,标记,暴力,并查集+分组背包

    A. Arpa’s hard exam and Mehrdad’s naive cheat time limit per test 1 second memory limit per test 256 ...

随机推荐

  1. shell初级-----结构化命令

    if-then语句 bash shell的if语句会执行if后面的那个命令,如果该命令的退出码状态为0会执行then部分的命令,如果是其他值不会执行. 格式如下: if command then co ...

  2. 汽车Lin总线特点

    串行通信:线间干扰小,节省线束,传输距离长 单线传输:增强的ISO 9141 (ISO 15765-1),总线电压基于VBAT 最高速率:20kbit/s 单主多从结构,无需仲裁:主节点同时包含主任务 ...

  3. Android 夜间模式的实现

    package com.loaderman.daynightdemo; import android.os.Bundle; import android.support.v7.app.AppCompa ...

  4. swiper 的左右箭头放到轮播外面

    <!-- 增加一个father的包裹 --> <div class="swiper-father"> <div class="swiper- ...

  5. ibatis使用iterate实现批量插入insert正确写法

    由于想批量入库提升效率,最近实现了ibatis的批量插入,结果一直报错 :StringIndexOutOfBoundsException ,原来是value中的格式不正确. 本人邮箱:techqu@1 ...

  6. 配置java开发环境,存在多个版本JDK时,怎样让所需版本生效

    我本地有个1.7.0的java版本,后来我新装了一个13的版本,但是命令行查java版本的时候,生效的还是1.7.0的版本,经过资料查询以及自身亲测,现将过程记录如下: 1.电脑右键选择--属性--高 ...

  7. 【VS开发】ActiveX开发注意事项

    [VS开发]ActiveX开发注意事项 标签:[VS开发] 注意:必须在工程的app文件的InitInstance()中加入如下代码,否则动态创建控件不会成功: AfxEnableControlCon ...

  8. java读取文件完整版

    public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in ...

  9. 听说这样可以加快oracle入表速度

    oracle 用occi编程的时候,批量提交使用绑定变量的方式,主要瓶颈再sql语句解析上,改成merge into后效率没有变化,但是使用绑定变量方法,能加快速度

  10. Codeforces Round #590 (Div. 3)(e、f待补

    https://codeforces.com/contest/1234/problem/A A. Equalize Prices Again #include<bits/stdc++.h> ...