[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场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...
随机推荐
- H5-data属性的一个问题
关于前端存数据的问题,前面写过一个博客:前端页面存取数据 看个例子: <!DOCTYPE html> <html lang="en"> <head&g ...
- for 循环的反汇编浅析
for 循环 for 循环是使用频度最高的循环结构,我们通过 C 语言反汇编实例,来分析 for 循环结构在计算机底层的原理和构造.首先,我们编写一个简单的 for 循环: 为了方便观察,我们用十六进 ...
- 洛谷P1339 [USACO09OCT]热浪Heat Wave
思路:裸SPFA过一遍(建议使用邻接链表存储),无向图,无向图,无向图,重要的事情要说三遍!!!蜜汁RE是什么鬼????第九个点数组开到20K,第十个点数组开到30K才AC.或许我代码写的有bug?( ...
- 在做公司项目是时,昨天晚上还好的,但是第二天启动tomcat发现tomcat启动了,但是没把项目启动起来
1.问题:在做公司项目是时,昨天晚上还好的,但是第二天启动tomcat发现tomcat启动了,但是没把项目启动起来 2.问题排除: 1)昨天晚上还好着呢,并且没改动代码,排除代码问题.日志中无报错信息 ...
- ACdream 1735 输油管道
输油管道 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 262144/131072KB (Java/Others) Problem Des ...
- nutz中实现登录验证
一.nutz是什么 nutz是一个轻便的web端开发框架.主页如下:http://www.nutzam.com/core/nutz_preface.html 二.session简单介绍 大家都知道ht ...
- 【ACM】nyoj_2_括号配对问题_201308091548
括号配对问题时间限制:3000 ms | 内存限制:65535 KB 难度:3描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示 ...
- [MGR——Mysql的组复制之单主模式 ]详细搭建部署过程
1,关于MySQL Group Replication 基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术.Replication-group(复制组)是由 ...
- HDU 4506
EASY题,快速幂... #include <iostream> #include <cstdio> #include <cstring> #include < ...
- ZOJ 3209
精确覆盖 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...