有歧义的号码

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

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

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

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

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

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

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

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

    链接 [https://hihocoder.com/contest/offers97/problems] 题意 题目1 : 放置矩形 时间限制:10000ms 单点时限:1000ms 内存限制:256 ...

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

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

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

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

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

    题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...

  8. [Offer收割]编程练习赛3 - 题目3 : 智力竞赛

    智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mea ...

  9. [Offer收割]编程练习赛5-1 小Ho的防护盾

    #1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星 ...

随机推荐

  1. C# 获取 IEnumerable 集合的个数

    IEnumerable<DocApply> data1 = data.Where(n => n.DocName.Contains(search)); if (data1.GetEnu ...

  2. React-Router ---withRouter

    import React from 'react' import { withRouter } from 'react-router' const Hello = (props) => { re ...

  3. mysql中int、bigint、smallint 和 tinyint的区别与长度

    各种整形,总结留作参考. bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 ...

  4. 团体程序设计天梯赛-练习集-L1-035. 情人节

    L1-035. 情人节 以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家.第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”.现给出此贴下点赞的朋友名单,请你找出那两位要请客 ...

  5. python tips:作用域与名字空间

    Python具有静态作用域,变量的作用域由它定义的位置决定,而与调用的位置无关. a = 2 def f(): a = 2 第一行的a的作用域是全局作用域,作用于定义位置后面的所有位置. 第四行的a的 ...

  6. PHP第一节课

    基础语法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  7. nyoj4-ASCII码排序

    ASCII码排序 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输入一个数N, ...

  8. 2019-05-14 Python SSL

    解决SSL报错问题 -- 导库 import ssl import urllib.request context = ssl._create_unverified_context() --用urlli ...

  9. Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

    手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blog.csdn.net/suncongbo/article/details/84962727 呜啊怎么又是数学 ...

  10. __call__ 和 __str__ 魔术方法

    魔术方法,在python中,是通过触发的形式调用,之所以称为魔术方法,是因为不需要特地的打印或调用它,在某些特定的时候,他会自己调用,所谓的特定的时候,也是我们自己所输入的代码操作的,不是莫名其妙的触 ...