[hihocoder][Offer收割]编程练习赛46
AEIOU
选出的子串中由AEI构成的子串和由OU构成的子串之间并没有什么关系,分别算出最长的加起来。
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} string s;
int dp[];
int p[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
cin >> s;
int n = s.size();
int max1 = , max2 = ;
memset(dp, , sizeof(dp));
for (int i = ; i < ; i++) p[i] = -;
for (int i = ; i < n; i++) {
if (s[i] == 'a') {
dp[i] = ;
if (p['a'] != -) dp[i] = max(dp[i], dp[p['a']] + );
if (dp[i] > dp[p['a']]) p['a'] = i;
}
if (s[i] == 'e') {
dp[i] = ;
if (p['a'] != -) dp[i] = max(dp[i], dp[p['a']] + );
if (p['e'] != -) dp[i] = max(dp[i], dp[p['e']] + );
if (dp[i] > dp[p['e']]) p['e'] = i;
}
if (s[i] == 'i') {
dp[i] = ;
if (p['a'] != -) dp[i] = max(dp[i], dp[p['a']] + );
if (p['e'] != -) dp[i] = max(dp[i], dp[p['e']] + );
if (p['i'] != -) dp[i] = max(dp[i], dp[p['i']] + );
if (dp[i] > dp[p['i']]) p['i'] = i;
}
max1 = max(max1, dp[i]);
}
memset(dp, , sizeof(dp));
for (int i = ; i < ; i++) p[i] = -;
for (int i = ; i < n; i++) {
if (s[i] == 'o') {
dp[i] = ;
if (p['o'] != -) dp[i] = max(dp[i], dp[p['o']] + );
if (dp[i] > dp[p['o']]) p['o'] = i;
}
if (s[i] == 'u') {
dp[i] = ;
if (p['o'] != -) dp[i] = max(dp[i], dp[p['o']] + );
if (p['u'] != -) dp[i] = max(dp[i], dp[p['u']] + );
if (dp[i] > dp[p['u']]) p['u'] = i;
}
max2 = max(max2, dp[i]);
}
cout << max1 + max2 << endl;
return ;
}
数字游戏
这题看别人的代码貌似跟全排列有关,但是没想通关系在哪。
我的解法是这样的:首先加减和交换的顺序并不会影响操作的步数,所以可以看做是先进行若干步交换,然后依次把每一位加减为B的对应位数字。以A为初始状态进行bfs,然后卡时,就过了、
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} char A[], B[];
int cost[][];
lint p[];
int n;
struct state {
int step;
char num[];
bool operator < (state s) const {
if (step == s.step) return false;
else return step > s.step;
}
};
lint calc(state s) {
lint rtn = ;
for (int i = ; i < n; i++) rtn += s.num[i] * p[n - i - ];
return rtn;
}
map<lint, int> mp;
priority_queue<state> q; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
scanf("%d%s%s", &n, A, B);
for (int i = ; i < n; i++) {
A[i] -= '';
B[i] -= '';
}
p[] = ;
for (int i = ; i < ; i++) p[i] = p[i - ] * ;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
if (i == j) cost[i][j] = ;
if (i > j) cost[i][j] = cost[j][i];
if (i < j) cost[i][j] = min(j - i, i + - j);
}
}
lint b = ;
for (int i = ; i < n; i++) b += B[i] * p[n - i - ];
state s, u;
s.step = ;
memcpy(s.num, A, sizeof(A));
q.push(s);
mp[calc(s)] = ;
int ans = , iter = ;
while (!q.empty()) {
s = q.top();
q.pop();
int step = s.step;
for (int i = ; i < n; i++) step += cost[s.num[i]][B[i]];
ans = min(ans, step);
iter++;
if (iter > ) break;
for (int i = ; i < n; i++) {
for (int j = i + ; j < n; j++) {
u = s;
char t = u.num[i];
u.num[i] = u.num[j];
u.num[j] = t;
u.step++;
lint c = calc(u);
if (mp.find(c) != mp.end()) continue;
else {
mp[c] = ;
q.push(u);
}
}
}
}
cout << ans << endl;
return ;
}
第K小分数
前K个分数显然由每个质数构成的分数的前连续若干项构成,由于最多有1000个质数,所以最多有1000个最后一项,所以第K个分数一定是这最多1000个最后一项中的一个。可以用二分法来确定每种分母的最后一项并计算其排名,若其排名为K,则找到了题目要求的分数。
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} lint p[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n;
lint k;
cin >> n >> k;
for (int i = ; i < n; i++) cin >> p[i];
for (int i = ; i < n; i++) {
lint l = , r = p[i], mid;
while (l + < r) {
mid = (l + r) >> ;
lint tmp = ;
for (int j = ; j < n; j++) tmp += mid * p[j] / p[i];
if (tmp == k) cout << mid << '/' << p[i] << endl;
if (tmp <= k) l = mid;
else r = mid;
}
}
return ;
}
逆序异或和
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n, a[N];
struct BIT {
int c[N];
void init() {
memset(c, , sizeof(c));
}
void insert(int x) {
for (; x < N; x += x & -x) c[x] ++;
}
int count(int x, int res=) {
for (; x; x ^= x & -x) res += c[x];
return res;
}
}bit[], num;
int main() {
scanf("%d", &n);
for (int i = ; i <= n; ++i) scanf("%d", a + i);
num.init();
for (int i = ; i < ; ++i) bit[i].init();
ll ans = ;
for (int i = n; i >= ; --i) {
int tar = num.count(a[i] - );
num.insert(a[i]);
for (int j = ; j < ; ++j) {
int _num = << j;
int _bit = a[i] & _num;
int _bit_tar = bit[j].count(a[i] - );
if (_bit) {
ans += 1LL * _num * (tar - _bit_tar);
bit[j].insert(a[i]);
}
else {
ans += 1LL * _num * _bit_tar;
}
}
}
cout << ans << endl;
return ;
}
[hihocoder][Offer收割]编程练习赛46的更多相关文章
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- [Offer收割]编程练习赛46
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- hihocoder offer收割编程练习赛8 C 数组分拆
思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...
- hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)
题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x ...
- hihoCoder [Offer收割]编程练习赛3 D子矩阵求和
子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...
- hihocoder [Offer收割]编程练习赛52 D 部门聚会
看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...
- hihocoder [Offer收割]编程练习赛14
A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...
随机推荐
- 预备篇 I :范畴与函子
拓扑是研究几何图形或空间在连续改变形状后还能保持不变的一些性质的一个学科.它只考虑物体间的位置关系而不考虑它们的形状和大小. 拓扑是集合上的一种结构. 拓扑英文名是Topology,直译是地志学,最早 ...
- 08 Django组件-Forms组件
Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...
- select和epoll最大的区别
先说说阻塞,因为一个线程只能处理一个套接字的I/O事件,如果想同时处理多个,可以利用非阻塞忙轮询的方式,伪代码如下: while true { for i in stream[] { if i has ...
- eas之导入导出
// 是否仅导出有数据的区域,该方法对所有的导出生效(默认为false)table.getIOManager().setExpandedOnly(true); 输入KDF 如果你已经有了一个完整的KD ...
- CentOS7 笔记 (一) .NETCore
安装系统CentOS,虚拟机好麻烦,直接在阿里云开了一个6个月免费的ECS. 熟悉Linux 基本命令 登录,exit,vi ,vim,vi保存关闭,w,ls,mkdir,df,ip addr,修改系 ...
- docker 容器操作( 以 tomcat 为例 )
一.容器操作 一个镜像可以启动多个容器.比如一个 tomcat 镜像,可以启动多个tomcat 容器,启动后的这些 tomcat 都是各自独立的 二.步骤 1.搜索镜像 [root@localhost ...
- (20)Spring Boot Servlet【从零开始学Spring Boot】
Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用Spring-Boot时,嵌 ...
- dubbo-源码阅读之bean装配过程(四)
Spring自定义schema 我们再使用dubbo进行时 会经常看到这样的标签 <!--开启注解扫描--> <context:component-scan base-package ...
- mybatis源码阅读-SqlSessionFactory和SqlSession(三)
说明 读了3遍:https://my.oschina.net/zudajun/blog/665956 现在统一整理成笔记 并跟着源码一行一行调试 统一整理起来 SqlSession 接口定义 publ ...
- 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据
通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据\ 下文将重点说明通过Sqoop实现Mysql与HDFS互导数据,Mysql与Hbase,Oracle与Hbase的互 ...