[Offer收割]编程练习赛35
有歧义的号码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void * x, const void * y) {
//x < y
return (*((int *)(x))) > (*((int *)(y))) ? : -;
}
int a[], b[];
const int r[] = { , , , -, -, , , -, , };
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, d, x, y;
scanf("%d", &n);
for (int i = ; i <= n; i++){
x = i, d = ;
if (x % == ) continue;
bool flag = true;
while (x){
a[d++] = x % ;
x /= ;
}
for (int j = ; j < d; j++){
b[j] = r[a[d - j - ]];
if (b[j] == -) flag = false;
}
y = ;
for (int j = d - ; j >= ; j--){
y = y * + b[j];
}
if (y>n || y == i) flag = false;
if (flag) printf("%d\n", i);
}
return ;
}
最短游览路线
算以1为源点的单源最短路,选择能走到1点的点中路径最短的一条加一输出。
没考虑-1的情况,也过了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void * x, const void * y) {
//x < y
return (*((int *)(x))) > (*((int *)(y))) ? : -;
}
#include <vector>
#include <queue>
using namespace std;
vector<int> G[];
queue<int> q;
bool inq[], v[];
int d[];
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, m, a, b, ans;
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++){
G[i].clear();
d[i] = 0x3FFFFFFF;
}
d[] = ;
memset(v, false, sizeof(v));
for (int i = ; i < m; i++){
scanf("%d%d", &a, &b);
G[a].push_back(b);
if (b == ) v[a] = true;
}
memset(inq, false, sizeof(inq));
while (!q.empty()) q.pop();
q.push();
inq[] = true;
while (!q.empty()){
int x = q.front();
q.pop();
inq[x] = false;
for (int i = ; i < G[x].size(); i++){
int u = G[x][i];
if (d[u]>d[x] + ){
d[u] = d[x] + ;
if (!inq[u]){
inq[u] = true;
q.push(u);
}
}
}
}
ans = 0x3FFFFFFF;
for (int i = ; i <= n; i++){
if (v[i] && d[i] < ans) ans = d[i];
}
printf("%d\n", ans + );
return ;
}
重复字符串匹配
缩写命名
二分图匹配,字典中的单词是一个点集,S中的各个字母是一个点集,若最大匹配为|S|输出Yes,否则输出No。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void * x, const void * y) {
//x < y
return (*((double *)(x))) > (*((double *)(y))) ? : -;
}
class MaxFlow_SAP {
public:
#define SAP_MAXN 20010
#define SAP_MAXM 880010
#define SAP_INF 0x3FFFFFFF struct Node {
int from, to, next;
int cap;
} edge[SAP_MAXM];
int tol;
int head[SAP_MAXN];
int dep[SAP_MAXN];
int gap[SAP_MAXN];
int cur[SAP_MAXN];
int S[SAP_MAXN];
int que[SAP_MAXN];
int n;
MaxFlow_SAP() {
clear();
}
void clear() {
tol = ;
memset(head, -, sizeof(head));
} void addedge(int u, int v, int w) {
edge[tol].from = u;
edge[tol].to = v;
edge[tol].cap = w;
edge[tol].next = head[u];
head[u] = tol++;
edge[tol].from = v;
edge[tol].to = u;
edge[tol].cap = ;
edge[tol].next = head[v];
head[v] = tol++;
}
void BFS(int start, int end) {
memset(dep, -, sizeof(dep));
memset(gap, , sizeof(gap));
gap[] = ;
int front, rear;
front = rear = ;
dep[end] = ;
que[rear++] = end;
while (front != rear) {
int u = que[front++];
if (front == SAP_MAXN) {
front = ;
}
for (int i = head[u]; i != -; i = edge[i].next) {
int v = edge[i].to;
if (dep[v] != -) {
continue;
}
que[rear++] = v;
if (rear == SAP_MAXN) {
rear = ;
}
dep[v] = dep[u] + ;
++gap[dep[v]];
}
}
}
int SAP(int start, int end) {
int res = ;
BFS(start, end);
int top = ;
memcpy(cur, head, sizeof(head));
int u = start;
int i;
while (dep[start] < n) {
if (u == end) {
int temp = SAP_INF;
int inser;
for (i = ; i < top; i++)
if (temp > edge[S[i]].cap) {
temp = edge[S[i]].cap;
inser = i;
}
for (i = ; i < top; i++) {
edge[S[i]].cap -= temp;
edge[S[i] ^ ].cap += temp;
}
res += temp;
top = inser;
u = edge[S[top]].from;
}
if (u != end && gap[dep[u] - ] == ) {
break;
}
for (i = cur[u]; i != -; i = edge[i].next)
if (edge[i].cap != && dep[u] == dep[edge[i].to] + ) {
break;
}
if (i != -) {
cur[u] = i;
S[top++] = i;
u = edge[i].to;
} else {
int min = n;
for (i = head[u]; i != -; i = edge[i].next) {
if (edge[i].cap == ) {
continue;
}
if (min > dep[edge[i].to]) {
min = dep[edge[i].to];
cur[u] = i;
}
}
--gap[dep[u]];
dep[u] = min + ;
++gap[dep[u]];
if (u != start) {
u = edge[S[--top]].from;
}
}
}
return res;
}
};
char str[], dict[][];
MaxFlow_SAP sap;
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, s, t;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
scanf("%s", str);
s = strlen(str);
for (int i = ; i < n; i++) {
scanf("%s", dict[i]);
}
sap.clear(), sap.n = n + s + ;
for (int i = ; i <= n + ; i++) {
sap.addedge(, i, );
}
for (int i = n + ; i <= n + s + ; i++) {
sap.addedge(i, n + s + , );
}
for (int i = ; i < n; i++) {
int m = strlen(dict[i]);
for (int j = ; j < m; j++) {
for (int k = ; k < s; k++) {
if (dict[i][j] == str[k]) {
sap.addedge(i + , n + k + , );
}
}
}
}
int maxflow = sap.SAP(, n + s + );
if (maxflow == s) printf("Yes\n");
else printf("No\n");
//1 2~n+1 n+2~n+s+1 n+s+2
}
return ;
}
[Offer收割]编程练习赛35的更多相关文章
- 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 分析
- [Offer收割]编程练习赛97
链接 [https://hihocoder.com/contest/offers97/problems] 题意 题目1 : 放置矩形 时间限制:10000ms 单点时限:1000ms 内存限制:256 ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...
- [Offer收割]编程练习赛48
题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...
- [Offer收割]编程练习赛3 - 题目3 : 智力竞赛
智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mea ...
- [Offer收割]编程练习赛5-1 小Ho的防护盾
#1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星 ...
随机推荐
- 新浪某个tab 页模仿
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Bootstrap 模态框(Modal)带参数传值实例
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 为了实现父窗体与其的交互,通常需要向其传值,实现 ...
- 【转载】JSP 中EL表达式用法详解
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
- 整理Crontab 定时计划
一. 什么是crontab? crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和 ...
- 【剑指Offer】36、两个链表的第一个公共结点
题目描述: 输入两个链表,找出它们的第一个公共结点. 解题思路: 本题首先可以很直观的想到蛮力法,即对链表1(假设长度为m)的每一个结点,遍历链表2(假设长度为n),找有没有与其相同的 ...
- node源码详解(五)
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource5 本博客同步在https://cnodejs.o ...
- 1.VMware虚拟机的安装
1.找到安装软件 2.使用如下操作安装 3.选择接受协议 4.修改安装目录 5.如果上一步有修改,此步骤不用改路径 7.安装后创建桌面快捷方式 8.安装成功可以看到桌面上有快捷方式图标 安装结束 声明 ...
- Python 实现 Excel 里单元格的读写与清空操作
#coding=utf-8 # coding=utf-8 作用是声明python代码的文本格式是utf-8,python按照utf-8的方式来读取程序. # 如果不加这个声明,无论代码中还是注释中有中 ...
- Java基础学习总结(67)——Java接口API中使用数组的缺陷
如果你发现在一个接口使用有如下定义方法: public String[] getParameters(); 那么你应该认真反思.数组不仅仅老式,而且我们有合理的理由避免暴露它们.在这篇文章中,我将试图 ...
- (22)Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】
上一篇对过滤器的定义做了说明,也比较简单.过滤器属于Servlet范畴的API,与Spring 没什么关系. Web开发中,我们除了使用 Filter 来过滤请web求外,还可以使用Sprin ...