热门号码

#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的更多相关文章

  1. HihoCoder1644 : 完美命名的烦恼([Offer收割]编程练习赛37)(有向图的一笔画问题||欧拉路)

    描述 程序员常常需要给变量命名.给函数命名.给项目命名.给团队命名…… 好的名字可以大大提高程序员的主观能动性,所以很多程序员在起名时都会陷入纠结和烦恼. 小Hi希望给新的项目起个完美的名字.首先小H ...

  2. HihoCoder1643 : 最少换乘([Offer收割]编程练习赛37)(bfs)

    描述 小Ho居住的城市有N条公交车线路,其中第i条线路上有Ki个车站. 某些线路之间会有公共的车站,小Ho可以在这些车站从一条线路换乘到另一条线路. 现在给定N条公交车线路以及两个车站S和E,你能帮助 ...

  3. HihoCoder1642 : 三角形面积和([Offer收割]编程练习赛37)(求面积)(扫描线||暴力)(占位)

    描述 如下图所示,在X轴上方一共有N个等腰直角三角形.这些三角形的斜边与X轴重合,斜边的对顶点坐标是(Xi, Yi). (11,5) (4,4) /\ /\(7,3) \ / \/\/ \ / /\/ ...

  4. 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. ...

  5. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  6. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  7. [Offer收割]编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  8. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  9. HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)

    描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...

随机推荐

  1. Dispatch Queues and Thread Safety

    Dispatch Queues and Thread Safety It might seem odd to talk about thread safety in the context of di ...

  2. sqlserver where in 在 mysql

    ) tmp); 主句(select * from (从句 temp) sql的 where in 删除  要更改为  // in( select * from ((select idfrom twhe ...

  3. vue-router同路由地址切换无效解决

    本来还想写的,一搜就有现成的,算了: http://blog.csdn.net/peng_guan/article/details/59702699

  4. vue-router 嵌套路由没反应

    先看下route.js //route.js const App = () => import('../App.vue'); const Login = () => import('../ ...

  5. turn.js中文API 写一个翻页效果的参数详细解释

    $('.flipbook').turn({     width: 922,     height: 600,     elevation: 50,     gradients: true,     a ...

  6. eas之kdtable分组

    如何指定是否要进行数据分组以及对哪些列进行分组 // 指定KDTable要进行数据分组 table.getGroupManager().setGroup(true); // 指明要对0.1.2三列进行 ...

  7. LA 3363

    Run Length Encoding(RLE) is a simple form of compression. RLE consists of the process for searching ...

  8. [置顶] 我的 Java 后端书架 (2016 年暖冬版)

    转自:  http://calvin1978.blogcn.com/articles/bookshelf16.html 我的 Java 后端书架 (2016 年暖冬版) 本书架主要针对 Java 后端 ...

  9. jdk8时间格式处理

    SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static,必须加锁,或者使用 DateUtils 工具类. 正例:注意线程安全,使用 DateU ...

  10. 【hihocoder 1499】A Box of Coins

    [题目链接]:http://hihocoder.com/problemset/problem/1499 [题意] [题解] 贪心,模拟; 从左往右对于每一列; 如果上下两个格子; ① 有一个格子超过了 ...