有歧义的号码

#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. (转)基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

    http://www.cnblogs.com/wuhuacong/p/4085725.html 在默认情况下,EasyUI的DataGrid好像都没有具备自动宽度的适应功能,一般是指定像素宽度的,但是 ...

  2. (转)OpenLayers3基础教程——OL3 介绍interaction

    http://blog.csdn.net/gisshixisheng/article/details/46808647 概述: 本节主要讲述OL3的交互操作interaction,重点介绍draw,s ...

  3. 【转载】Java 集合详解

    转载:https://www.cnblogs.com/ysocean/p/6555373.html 一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段 ...

  4. 15.5.3 【Task实现细节】状态机的结构

    状态机的整体结构非常简单.它总是使用显式接口实现,以实现.NET 4.5引入的 IAsync StateMachine 接口,并且只包含该接口声明的两个方法,即 MoveNext 和 SetState ...

  5. let、var、const用法区别

    1.var var 声明的变量为全局变量,并会进行变量提升:也可以只声明变量而不进行赋值,输出为undefined,以下写法都是合法的. var a var a = 123  2.let let 声明 ...

  6. nyoj112-指数运算

    指数运算时间限制:600 ms  |  内存限制:65535 KB难度:2描述写一个程序实现指数运算 X^N.(1<X<10,0<N<20)输入输入包含多行数据 每行数据是两个 ...

  7. 29.es路由原理

    主要知识点 1.document路由到shard的理解及原理 2.路由算法:shard = hash(routing) % number_of_primary_shards 3.routing值(_i ...

  8. PAT 1072. Gas Station

    A gas station has to be built at such a location that the minimum distance between the station and a ...

  9. C# 通过反射为一个对象赋值

    /// <summary>   /// 反射赋值   /// </summary>   public class ObjectReflection   {       publ ...

  10. POJ 2068

    就是必胜点与必败点的计算而已.计算每一种情况.设st[i][j]为在第i个人剩下j个石头时的情况,拿它转移后的情况比较.可以到达必败点,则当前为必胜点.若只能到达必胜点,则当前点为必败点. #incl ...