[Offer收割]编程练习赛39
公平分队
#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<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII; int cmp(const void * x, const void * y) {
#define datatype int
datatype dx = *((datatype *)(x)), dy = *((datatype *)(y));
//x < y
return dx < dy ? - : ;
#undef datatype
} int a[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
std::ios::sync_with_stdio(), cin.tie();
int n;
cin >> n;
for (int i = ; i < * n; i++) cin >> a[i];
sort(a, a + * n);
lint ans = ;
for (int i = ; i < n; i++) ans += a[i];
ans += a[ * n - ];
cout << ans << endl;
return ;
}
XY游戏
#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<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII; int cmp(const void * x, const void * y) {
#define datatype int
datatype dx = *((datatype *)(x)), dy = *((datatype *)(y));
//x < y
return dx < dy ? - : ;
#undef datatype
} map<int, int> mp;
struct state {
int a[][];
int step;
};
queue<state> q;
int hash_state(state st) {
int rtn = ;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++)
rtn = rtn * + st.a[i][j];
}
return rtn;
}
const int dx[] = {-, , , };
const int dy[] = {, , , -};
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
std::ios::sync_with_stdio(), cin.tie();
state initial, st, stt;
char ch;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
cin >> ch;
while (ch != 'O' && ch != 'X' && ch != 'Y') cin >> ch;
if (ch == 'O') initial.a[i][j] = ;
else if (ch == 'X') initial.a[i][j] = ;
else initial.a[i][j] = ;
}
}
initial.step = ;
q.push(initial);
mp[hash_state(initial)]++;
while (!q.empty()) {
st = q.front();
q.pop();
bool ok = false;
for (int i = ; i < ; i++) {
if (st.a[i][] == && st.a[i][] == && st.a[i][] == && st.a[i][] == ) ok = true;
if (st.a[i][] == && st.a[i][] == && st.a[i][] == && st.a[i][] == ) ok = true;
if (st.a[][i] == && st.a[][i] == && st.a[][i] == && st.a[][i] == ) ok = true;
if (st.a[][i] == && st.a[][i] == && st.a[][i] == && st.a[][i] == ) ok = true;
if (st.a[][] == && st.a[][] == && st.a[][] == && st.a[][] == ) ok = true;
if (st.a[][] == && st.a[][] == && st.a[][] == && st.a[][] == ) ok = true;
if (st.a[][] == && st.a[][] == && st.a[][] == && st.a[][] == ) ok = true;
if (st.a[][] == && st.a[][] == && st.a[][] == && st.a[][] == ) ok = true;
}
if (ok) {
cout << st.step << endl;
return ;
}
stt = st;
stt.step = st.step + ;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
if (st.a[i][j] == ) continue;
for (int k = ; k < ; k++) {
if ( <= i + dx[k] && i + dx[k] < && <= j + dy[k] && j + dy[k] < && st.a[i + dx[k]][j + dy[k]] == ) {
stt.a[i + dx[k]][j + dy[k]] = stt.a[i][j];
stt.a[i][j] = ;
int h = hash_state(stt);
if (mp.find(h) == mp.end()) {
mp[h]++;
q.push(stt);
}
stt.a[i][j] = stt.a[i + dx[k]][j + dy[k]];
stt.a[i + dx[k]][j + dy[k]] = ;
}
}
}
}
}
cout << - << endl;
return ;
}
第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<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII; int cmp(const void * x, const void * y) {
#define datatype int
datatype dx = *((datatype *)(x)), dy = *((datatype *)(y));
//x < y
return dx < dy ? - : ;
#undef datatype
}
lint p[];
int m = ;
lint calc(lint x) {
lint rtn = x;
for (int i = ; i < ( << m); i++) {
int cnt = , mlt = ;
for (int j = ; j < m; j++) {
if (i & ( << j)) {
cnt++;
mlt *= p[j];
}
}
if (cnt & ) rtn -= x / mlt;
else rtn += x / mlt;
}
return rtn;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
std::ios::sync_with_stdio(), cin.tie();
lint n, k;
cin >> n >> k;
lint l = , r = n;
for (int i = ; i * i <= n; i++) {
if (n % i == ) {
p[m++] = i;
while (n % i == ) n /= i;
}
}
if (n != ) p[m++] = n;
while (l < r) {
lint mid = (l + r) >> ;
lint fk = calc(mid);
if (fk < k) l = mid + ;
else r = mid;
}
cout << r << endl;
return ;
}
前缀后缀查询
#include <bits/stdc++.h> using namespace std;
#define pii pair<int,int>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define x first
#define y second
#define SZ(x) x.size()
#define all(x) x.begin(),x.end()
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
#define DBG(x) cerr<<(#x)<<"="<<x<<"\n";
#define inf 1000000007
#define mod 1000000007
#define ll long long
#define N 100010 template<class T,class U> void Max(T &a,U b){if(a<b)a=b;}
template<class T,class U> void Min(T &a,U b){if(a>b)a=b;}
template<class T,class U> void add(T &a,U b){a+=b;if(a>=mod)a-=mod;} template<class T,class U> int min(T a,U b){return a>=b?b:a;} int a[],b[],sz;
char s[];
int ch[][];
void add(char s[],int a[]){
int n=strlen(s),p=;
rep(i,,n){
int j=s[i]-'a';
if(!ch[p][j])ch[p][j]=++sz;
p=ch[p][j];
a[i+]=p;
}
}
int find(string s){
int p=;
rep(i,,SZ(s)){
int j=s[i]-'a';
if(!ch[p][j])return -;
p=ch[p][j];
}
return p;
}
int main(){
int i,j,k,ca=,T,n,m,K;
scanf("%d%d",&n,&K);
unordered_map<ll,int>g;
int w;sz=;
rep(i,,n){
scanf("%s%d",s,&w);
m=strlen(s);
add(s,a);
reverse(s,s+m);
add(s,b);
rep(j,,m+){
rep(k,,m+){
ll x=a[j]*1000007LL+b[k];
if(!g.count(x))g[x]=w;
else if(w>g[x])g[x]=w;
}
}
}
string s,t;
while(K--){
cin>>s>>t;
reverse(all(t));
int ans=-;
int x=find(s),y=find(t);
if(x!=-&&y!=-){
ll w=x*1000007LL+y;
if(g.count(w))ans=g[w];
}
printf("%d\n",ans);
}
}
[Offer收割]编程练习赛39的更多相关文章
- HihoCoder1656 : 前缀后缀查询([Offer收割]编程练习赛39)(字典树+小技巧)
描述 给定一个包含N个单词的字典:{W1, W2, W3, ... WN},其中第i个单词Wi有具有一个权值Vi. 现在小Hi要进行M次查询,每次查询包含一个前缀字符串Pi和一个后缀字符串Si.他希望 ...
- HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)
描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...
- HihoCoder1654: XY游戏([Offer收割]编程练习赛39)(好久没写搜索)(已经超级简短了)
描述 如下图所示,在4x4的棋盘上有X和Y两种棋子各若干枚:O表示空格. OXXY YOOX XOOY XOXX 小Hi每次可以选择任意一枚棋子,将它移动到上下左右相邻的空格中. 小Hi想知道最少移动 ...
- HihoCoder1653 : 公平分队([Offer收割]编程练习赛39)(贪心)
描述 小Hi和小Ho在玩一个战争游戏.游戏中2N个战斗单位,其中第i个单位的战斗力是Ai. 现在小Hi和小Ho要各选N个单位组成队伍,当然他们都希望自己队伍的总战斗力越大越好. 为了使分队更加公平,经 ...
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- [Offer收割]编程练习赛46
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...
随机推荐
- 判断input或者div.span等标签是否存在
//用jQuery检查某个元素在网页上是否存在时,应该根据获取元素的长度来判断,代码如下 if($("#email"+i).length > 0){//判断input是否存在 ...
- Entity FrameWork 操作使用详情
Entity FrameWork 是以ADO.net为基础发展的ORM解决方案. 一.安装Entity FrameWork框架 二.添加ADO.Net实体数据模型 三.EF插入数据 using Sys ...
- js取最值:
取最值是很常见的一种运算,各个语言都会遇到这个问题.Js中,如果简单的进行取最值,完全没必要自己写一个比较函数,原生的js就提供了方法.这些方法都属于Math 对象(引用w3c:Math 对象并不像 ...
- Java中StringTokenizer类的使用
StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数. 1.构造函数 public StringTokenizer(String str) public Str ...
- [POJ2404]Jogging Trails
我太弱了. 我们可以知道一个结论就是对于一个图的话假如所有点的度数都是偶数,那么只需要走一波欧拉回路. 所以我们就把奇点补成偶点. 将两个奇点补充到偶点的最佳方法是选择任意两个奇点连最短路径为权的边 ...
- Java基本类型转换
1.自动类型转换 java所有的数值型变量都可以相互转换,如果系统支持把某种基本类型的值直接付赋给另一个基本类型的变量,则这种方式被称为自动类型转换. 当把一个表数范围小的数值或变量直接赋给另一个表数 ...
- 37.query string、_all metadata
主要知识点 1.query string基础语法 2._all metadata的理解 一.query string基础语法 1.GET /test_index/test_type/_sear ...
- Golang - 复合类型
目录 Golang - 复合类型 1. 指针 2. new()和make() 3. 数组 4. slice 5. Map 6. 结构体 7. 结构体参数 Golang - 复合类型 1. 指针 go语 ...
- Git 基础教程 之 解决合并冲突
① 解决冲突 把Git合并失败的文件手动编辑成我们希望的内容 ② 提交,合并完成 场景: ① 新分支feature1,修改后,add, commit: ② 切回master后,修改后,add, ...
- cxGrid主从表删除从表记录的困惑
cxgrid主从表显示方便直观. varADetailDC: TcxGridDataController;AView: TcxCustomGridTableView; with cxgrdbndtbl ...