Codeforces 989 P循环节01构造 ABCD连通块构造 思维对云遮月参考系坐标轴转换
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连通块构造 思维对云遮月参考系坐标轴转换的更多相关文章
- P1141 01迷宫 dfs连通块
题目描述 有一个仅由数字000与111组成的n×nn \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻444格中的某一格111上,同样若你位于一格1上,那么你可以移动到相邻444格 ...
- P1141 01迷宫(连通块模板)
题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...
- Codeforces Round #222 (Div. 1) Maze —— dfs(连通块)
题目链接:http://codeforces.com/problemset/problem/377/A 题解: 有tot个空格(输入时统计),把其中k个空格变为wall,问怎么变才能使得剩下的空格依然 ...
- Codeforces 920E-Connected Components? (set,补图,连通块)
Connected Components? CodeForces - 920E You are given an undirected graph consisting of n vertices a ...
- Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location 扩展欧几里得方块内光线反射
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...
- Codeforces Round #117 (Div. 2) D.Common Divisors(KMP最小循环节)
http://codeforces.com/problemset/problem/182/D 题意:如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S ...
- codeforces 825F F. String Compression dp+kmp找字符串的最小循环节
/** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...
- Common Divisors CodeForces - 182D || kmp最小循环节
Common Divisors CodeForces - 182D 思路:用kmp求next数组的方法求出两个字符串的最小循环节长度(http://blog.csdn.net/acraz/articl ...
- 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 ...
随机推荐
- Android 多分辨率与不同语言适配
一.适配不同国家语言 智能手机系统设置里各国语言的选项,然后我们项目里可以通过资源目录实现适配语言.我们知道工程的根目录有个res/的目录,res/下有一个资源类型的目录,其中有个values/str ...
- Kotlin之注释
kotliin中注释和java注释是一样的,支持单行注释和多行注释,但kotlin支持嵌套,java不支持
- Rate 评分
评分组件 基础用法 评分被分为三个等级,可以利用颜色对分数及情感倾向进行分级(默认情况下不区分颜色).三个等级所对应的颜色用过colors属性设置,而它们对应的两个阈值则通过 low-threshol ...
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
resources下新建File文件 bean.xml 配置jdbcTemplate 注入DataSource 新建测试方法 复制demo1改个名字叫做demo2 编写Insert的方法
- Python学习笔记:(十三)错误和异常
一.语法错误 在Python中语法错误称之为解析错误. 在语法分析器指出了出错的哪一行,并且在最先找到错误的位置标记了一个小小的箭头. 二.异常 1.异常处理 try except else fina ...
- fixture作用范围
ixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function fixture(scope="f ...
- 本地虚拟机部署线上php程序---不需要修改数据库信息
1.特别注意:拿来线上php程序后一般是不需要修改config.php里面的数据库连接信息的,如果修改了会报错:站点已关闭.所以 2.5 步骤是需要省略的.如果拿来的是最开始的php源码,需要配置原始 ...
- Stream parallel并行流的思考
1.并行流并不一定能提高效率,就和多线程并不能提高线程的效率一样 因为引入并行流会引起额外的开销,就像线程的频繁上下文切换会导致额外的性能开销一样,当数据在多个cpu中的处理时间小于内核之间的传输时间 ...
- Maven使用基础
(转)https://my.oschina.net/xiaomaoandhong/blog/104045 基于 约定优于配置(Convention Over Configuration)的原则,无特殊 ...
- [转帖]SUN/Oracle JDK还是OpenJDK?
你安装的是 https://www.cnblogs.com/shoufeng/p/9719995.html 目录 1 如何查看你安装的JDK版本 1.1 要用到的命令行工具 1.2 查看JDK的版本 ...