Codeforces 950 010子序列拆分 数列跳棋
A
B
a,b两个序列分成K段 每一段的值相等
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int maxn = ;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll mod = 3e7;
ll num[maxn];
ll num2[maxn];
//priority_queue<int, vector<int>, less<int>> que;
int main()
{
int n, m;
ll now;
cin >> n >> m;
for (int i = ; i <= n; i++)
{
scanf("%lld", num+i);
//pre[i] = pre[i - 1] + now;
}
for (int i = ; i <= m; i++)
{
scanf("%lld", num2+i);
//pre2[i] = pre2[i - 1] + now;
}
int cur = ;
int cur2 = ;
ll sum1 = num[];
ll sum2 = num2[];
int anser = ;
while (cur != n + )
{
if (sum1 == sum2)
{
anser++;
sum1+=num[++cur];
sum2+=num2[++cur2];
continue;
}
if(sum1<sum2)
{
sum1+=num[++cur];
}
else
{
sum2+=num2[++cur2];
}
}
cout<<anser<<endl;
}
C
问子序列可否全部分成0或者010 01010这种01相间的序列
用Vector和一个int指针维护 int之前的vector表示以0结尾的 之后的表示以1结尾的
如果指针在插入一个1前是在0或者全部插入完还有以1结尾的就return false
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int maxn = ;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll mod = 3e7;
vector<int> ans[];
int anser = ;
int cnt = ;
//priority_queue<int, vector<int>, less<int>> que;
int main()
{
string a;
cin >> a;
int len = a.size();
for (int i = ; i < len; i++)
{
if (a[i] == '')
{
ans[++cnt].pb(i + );
}
else
{
if (cnt <= ) //!!!!!!!!!!!!
{
cout << - << endl;
return ;
}
ans[cnt--].pb(i + );
}
anser = max(anser, cnt);
}
if (cnt != anser)
{
cout << - << endl;
return ;
}
cout << anser << endl;
for (int i = ; i <= anser; i++)
{
int lenth = ans[i].size();
cout << lenth << " ";
for (int j = ; j < lenth; j++)
{
cout << ans[i][j] << " ";
}
cout << endl;
}
}
D
思维题 可以找规律做 也可以推公式做
很容易想到原本序列前N/2个数的位置是不会变的 因为这些数一旦跳了 最后序列的长度就会小于N 这些数在最后的位置下标为奇数位
然后其他跳的数 假设他跳之后的位置为P 则现在在他左边的P/2个数是原数组原来就在他左边的
右边有N-P/2个数(包括他自己)是连续的 也就是说他之前的位置往前进了N-P/2个块
所以公式就是P=P/2+N 一直循环直到P为奇数为止 这就是最终序列的数对应原来序列的位置
最后答案就是P/2+1
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
priority_queue<int, vector<int>, less<int>> que;
ll mod = 3e7;
const int MAXN = ;
int main()
{
ll n;
ll q;
cin >> n >> q;
while(q--)
{
ll now;
cin >> now;
while(!(now%))
{
now=now/+n;
}
cout<<now/+<<endl;
}
}
Codeforces 950 010子序列拆分 数列跳棋的更多相关文章
- 洛谷P1415 拆分数列[序列DP 状态 打印]
题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时 ...
- 洛谷 P1415 拆分数列 解题报告
拆分数列 题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数. 如果有多组解,则输出使得最后一个 ...
- luoguP1415 拆分数列 [dp]
题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时,字典序最大的解(即先要满足最后一个数最小:如果有多组解,则使得第一个数尽量大:如 ...
- Codeforces 950 D. A Leapfrog in the Array
http://codeforces.com/contest/950/problem/D 前n/2个格子的奇数下标的数没有参与移动 候n/2个格子的奇数下标的数一定是一路移向偶数下标移 所以还原数的初始 ...
- Codeforces 950 C. Zebras
http://codeforces.com/contest/950/problem/C 题意: 给出一个01序列,问能否将这个序列分为若干个0开头0结尾的序列 输出方案 如果有解,几个1能在一个序列就 ...
- 洛谷P1415 拆分数列(dp)
题目链接:传送门 题目: 题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输 ...
- 洛谷P1415 拆分数列
题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时 ...
- jzoj4915. 【GDOI2017模拟12.9】最长不下降子序列 (数列)
题面 题解 调了好几个小时啊--话说我考试的时候脑子里到底在想啥-- 首先,这个数列肯定是有循环节的,而且循环节的长度\(T\)不会超过\(D\) 那么就可以把数列分成三份,\(L+S+R\),其中\ ...
- P1415 拆分数列
传送门 DP数列长度过大无法枚举,考虑DP设f1[i]储存以第i个字符为结尾时,的最后一个数最小时,这个数的开头的位置(很难想有木有)OK,状态有了,方程想一想就出来了:设$num[i][j]$为数列 ...
随机推荐
- legend3---阿里云如何多个域名指向同一个网站
legend3---阿里云如何多个域名指向同一个网站 一.总结 一句话总结: 先寻求资料及文档,没有找到的话自己摸索一下就好 结论:多个域名都需要备案 二.阿里云如何多个域名指向同一个网站 当前情况 ...
- 运维自动化之ansible的安装与使用 转
运维自动化之ansible的安装与使用 随着服务器数量的增长,我们需要一个批量工具去提高工作效率,之前用的是puppet,ansible的简单,适用让我眼前一亮,决定写一篇ansible从安装到基本配 ...
- linux命令--truncate 学习
truncate命令可以将一个文件缩小或者扩展到某个给定的大小 可以利用该命令和-s选项来特别指定文件的大小 1.清空一个文件内容,尤其是log 2. truncate -s 0 test
- PropertyInfo、FieldInfo、MemberInfo的区别
public class TestClass { ;//私有一律获取不到 public int b { ; } ; } } ; } public static void TestMethod() { ...
- hibernate 配置+注释
Hibernate配置属性 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.c ...
- rocketMQ 通信协议格式
rocketMQ 使用 netty 通信,端对端的通信,为了避免粘包.分包,需要指定发送数据的边界. 使用的解码器是 LengthFieldBasedFrameDecoder // org.apach ...
- Linux_KVM虚拟机
目录 目录 Hpyervisor的种类 安装KVM 使用virsh指令管理虚拟机 KVM虚拟机的网络设置 Hpyervisor的种类 hpyervisor:是一种VMM(Virtual Machine ...
- 请求转发、包含、重定向 getAttribute 和 setAttribute POST和GET编码
一.请求转发 请求包含 请求重定向 Demo5.java 注意:doPost()方法中别忘写doGet(request, response); public void doGet(HttpS ...
- Cocos2d-X网络编程(4) Cocos2d中的网络通信协议——Socket通信
Socket,俗称网络套接字,本身并不是协议,而是一个调用接口,是对TCP/IP协议的封装和应用,.提供了一系列方法方便开发者进行网络通讯. TCP/IP协议是使用最早的通讯协议,它是传输层协议,主要 ...
- idea中dbug模式的使用
1:进入断点状态时候每个按钮的用途如图: 2:当运行过得代码需要查看输出内容时候,可以选中需要查看的代码进行运行如图:会在控制台输出选中代码执行的结果