[Offer收割]编程练习赛37
热门号码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
using std::vector;
using std::queue;
using std::map;
using std::sort;
int cmp(const void * x, const void * y) {
//x < y
#define datatype int
return (*((datatype *)(x))) > (*((datatype *)(y))) ? : -;
#undef datatype
}
map<long long, int> mp;
char str[];
const int num[] = {, , , , , , , , , , , , , , , , , , , , , , , , , };
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, m, l;
scanf("%d%d", &n, &m);
for (int i = ; i < n; i++) {
scanf("%s", str);
l = strlen(str);
long long tmp = ;
for (int j = ; j < l; j++) {
tmp = tmp * + num[str[j] - 'A'];
}
mp[tmp]++;
}
for (int i = ; i < m; i++) {
long long tmp;
scanf("%lld", &tmp);
printf("%d\n", mp[tmp]);
}
return ;
}
三角形面积和
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
using std::vector;
using std::queue;
using std::map;
using std::sort;
#define read(x) scanf("%d",&x)
struct point {
int x, y;
};
int cmp(const void * x, const void * y) {
#define datatype point
datatype dx = *((datatype *)(x)), dy = *((datatype *)(y));
//x < y
return dx.x - dx.y > dy.x - dy.y ? : -;
#undef datatype
} point p[];
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n;
read(n);
for (int i = ; i < n; i++) {
read(p[i].x);
read(p[i].y);
}
qsort(p, n, sizeof(point), cmp);
double ans = ;
int ptr = ;
while (ptr < n) {
double a = p[ptr].x + p[ptr].y;
int j;
bool find = false;
for (j = ptr + ; j < n; j++) {
if (p[j].x + p[j].y <= a) continue;
if (p[j].x - p[j].y >= p[ptr].x + p[ptr].y) {
ans += p[ptr].y * p[ptr].y;
find = true;
break;
}
double b = p[j].y - p[j].x;
ans += p[ptr].y * p[ptr].y - (a + b) * (a + b) / ;
find = true;
break;
}
if (!find) ans += p[ptr].y * p[ptr].y;
ptr = j;
}
printf("%.2lf\n", ans);
return ;
}
最少换乘
其实很简单,但是最多50w个站编号却是1-500w,这就是map牛逼的地方了呀。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
using std::vector;
using std::queue;
using std::map;
using std::sort;
#define read(x) scanf("%d",&x)
struct point {
int x, y;
};
int cmp(const void * x, const void * y) {
#define datatype point
datatype dx = *((datatype *)(x)), dy = *((datatype *)(y));
//x < y
return dx.x - dx.y > dy.x - dy.y ? : -;
#undef datatype
}
map<int, int> mp;
vector<int> G[], H[];
int k[], d[];
bool fw[], fs[];
queue<int> q;
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, s, e, p, cnt = ;
read(n);
read(s);
read(e);
for (int i = ; i < n; i++) {
read(k[i]);
for (int j = ; j < k[i]; j++) {
read(p);
G[i].push_back(p);
if (mp.find(p) == mp.end()) {
mp[p] = cnt++;
}
H[mp[p]].push_back(i);
}
}
memset(d, 0x3F, sizeof(d));
while (!q.empty()) q.pop();
memset(fw, false, sizeof(fw));
memset(fs, false, sizeof(fs));
int mps = mp[s];
for (int i = ; i < H[mps].size(); i++) {
d[H[mps][i]] = ;
q.push(H[mps][i]);
fw[H[mps][i]] = true;
}
while (!q.empty()) {
int x = q.front();
q.pop();
for (int i = ; i < G[x].size(); i++) {
int v = G[x][i];
int mpv = mp[v];
if (fs[mpv]) continue;
fs[mpv] = true;
for (int j = ; j < H[mpv].size(); j++) {
int w = H[mpv][j];
if (fw[w]) continue;
if (d[w] > d[x] + ) {
d[w] = d[x] + ;
fw[w] = true;
q.push(w);
}
}
}
}
int ans = 0x3FFFFFFF;
int mpe = mp[e];
for (int i = ; i < H[mpe].size(); i++) {
if (d[H[mpe][i]] < ans) ans = d[H[mpe][i]];
}
printf("%d\n",ans);
return ;
}
完美命名的烦恼
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<string>
using std::vector;
using std::queue;
using std::map;
using std::sort;
using std::string;
#define read(x) scanf("%d",&x)
#define reads(x) scanf("%s",x) 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
} char str[];
map<string, int> mp;
vector<int> G[];
vector<bool> v[];
string sg[];
int din[], dout[], m = ;
char ans[];
void dfs(int x) {
for (int i = ; i < G[x].size(); i++) {
if (v[x][i]) continue;
v[x][i] = true;
dfs(G[x][i]);
}
ans[m++] = sg[x][sg[x].size() - ];
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, cnt = , s = -, e = -;
bool flag = false;
read(n);
for (int i = ; i < * n; i++) G[i].clear();
for (int i = ; i < n; i++) {
reads(str);
int len = strlen(str);
if (len == ) {
printf("%s", str);
flag = true;
continue;
}
string s(str);
string sl = s.substr(, len - );
string sr = s.substr(, len);
if (mp.find(sl) == mp.end()) {
mp[sl] = cnt;
sg[cnt] = sl;
cnt++;
}
if (mp.find(sr) == mp.end()) {
mp[sr] = cnt;
sg[cnt] = sr;
cnt++;
}
int mpl = mp[sl], mpr = mp[sr];
G[mpl].push_back(mpr);
v[mpl].push_back(false);
dout[mpl]++, din[mpr]++;
}
if (flag) return ;
for (int i = ; i < cnt; i++) {
if (din[i] == dout[i]) continue;
if (din[i] - dout[i] > || dout[i] - din[i] > ) {
printf("NO\n");
return ;
}
if (din[i] - dout[i] == ) {
if (e == -) e = i;
else {
printf("NO\n");
return ;
}
}
if (dout[i] - din[i] == ) {
if (s == -) s = i;
else {
printf("NO\n");
return ;
}
}
}
if (s == -) s = ;
dfs(s);
for (int i = sg[s].size() - ; i >= ; i--) ans[m++] = sg[s][i];
for (int i = m - ; i >= ; i--) printf("%c", ans[i]);
return ;
}
[Offer收割]编程练习赛37的更多相关文章
- HihoCoder1644 : 完美命名的烦恼([Offer收割]编程练习赛37)(有向图的一笔画问题||欧拉路)
描述 程序员常常需要给变量命名.给函数命名.给项目命名.给团队命名…… 好的名字可以大大提高程序员的主观能动性,所以很多程序员在起名时都会陷入纠结和烦恼. 小Hi希望给新的项目起个完美的名字.首先小H ...
- HihoCoder1643 : 最少换乘([Offer收割]编程练习赛37)(bfs)
描述 小Ho居住的城市有N条公交车线路,其中第i条线路上有Ki个车站. 某些线路之间会有公共的车站,小Ho可以在这些车站从一条线路换乘到另一条线路. 现在给定N条公交车线路以及两个车站S和E,你能帮助 ...
- HihoCoder1642 : 三角形面积和([Offer收割]编程练习赛37)(求面积)(扫描线||暴力)(占位)
描述 如下图所示,在X轴上方一共有N个等腰直角三角形.这些三角形的斜边与X轴重合,斜边的对顶点坐标是(Xi, Yi). (11,5) (4,4) /\ /\(7,3) \ / \/\/ \ / /\/ ...
- HihoCoder1641 : 热门号码([Offer收割]编程练习赛37)(模拟)
描述 1 2 3 ABC DEF 4 5 6 GHI JKL MNO 7 8 9 PQRS TUV WXYZ * 0 # 我们知道电话拨号盘上数字会有若干字母对应,例如2对应ABC,7对应PQRS. ...
- 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场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...
随机推荐
- emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
想要更详细了解pjax,需要查看官网 或者看本站文章:jQuery.pjax.js:使用AJAX和pushState无刷新加载网页(官网教程中文翻译) 效果看本站,音乐无刷新播放,代码高亮和复制js加 ...
- (转) Arcgis for js加载百度地图
http://blog.csdn.net/gisshixisheng/article/details/44853709 概述: 在前面的文章里提到了Arcgis for js加载天地图,在本节,继续讲 ...
- dispatch_sync:As an optimization, this function invokes the block on the current thread when possible
两件事情: 1.是否是一个线程: 2.queue task 的目标线程是否有未完成的task. 模型:一个线程处理当前的task还有通过gc d派发来的待执行task. 猜测: 如果目标thread上 ...
- C# 写入二进制文件
写入整型25 文件在MiniHex中显示 写入字符串I am happy 0A 6D - 6D - 这一行数据是C#把字符串转换为16进制形式 不知道为啥用MiniHex打开多了个0A 写入空&quo ...
- 输出字符串格式化/ Linq对数组操作 /一个按钮样式
textBox1.Text = dateTimePicker1.Value.ToString("yyyy-MM-dd HH:mm:ss"); , , , , , , , , , , ...
- python学习笔记之小小购物车
#coding=utf-8 ''' Created on 2015-6-18 @author: 悦文 ''' def goods_list(): shangpin={"} print &qu ...
- Google HTML/CSS Style Guide
转自: http://google.github.io/styleguide/htmlcssguide.xml Google HTML/CSS Style Guide Revision 2.23 Ea ...
- html第九节课
正则表达式和marquee 1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4 ...
- [SDFZOJ]1069:树上统计
神题...std丑的不行. 我们可以发现i->i+1的边被覆盖过i×(n-i)次. 因为以1->i为左端点,以i+1->n的为右端点,i->i+1都将被覆盖这么多次. 然后从1 ...
- eclipse快捷键深入理解
1.Eclipse 中的重构功能使其成为了一个现代的 Java 集成开发环境 (IDE),而不再是一个普通的文本编辑器.使用重构,您可以轻松更改您的代码,而不必担心对别处造成破坏. 2.Eclipse ...