有歧义的号码

#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. nim游戏解法(转)

    转自:http://acm.hdu.edu.cn/forum/read.php?fid=9&tid=10617 取火柴的游戏 题目1:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若 ...

  2. The as! Operator

    Prior to Swift 1.2, the as operator could be used to carry out two different kinds of conversion, de ...

  3. Mysql 设置起始值

    alter table t_tszj_pet_activity AUTO_INCREMENT=10000;   设置 id 从10000 开始

  4. 在滑动3D模型(Cube)时,手指点击进入相应的某一部分

    public void OnClickRay() { Ray ray = new Ray(); RaycastHit shootHit; ray.origin = cameras.transform. ...

  5. PAT_A1144#The Missing Number

    Source: PAT A1144 The Missing Number (20 分) Description: Given N integers, you are supposed to find ...

  6. atcoder.keyence2019.contest E-Connecting Cities

    真是道好题啊,当时怎么想都没想出来... 传送门 简述题意: 有n个点,每个点有一个权值Ai,连接i,j两个点的代价是 |i−j|×D+Ai+Aj  其中D是给定的常数,问把n个点联通的最小代价 1≤ ...

  7. 35.multi-index和multi-type搜索模式

        一.multi-index和multi-type搜索模式 /_search:所有索引,所有type下的所有数据都搜索出来 /index1/_search:指定一个index,搜索其下所有typ ...

  8. android网络类型之2G-3G切换

    在android手机‘设置’-‘移动网络类型’里可以看到有关网络类型的选项,一般默认为3G优先. 如果有需要在程序中切换网络类型的朋友,不妨试试下面的方法.这里提供了几种思路,虽然可能对待 手机的方式 ...

  9. poj 3177&&poj 3352加边构双联通(有重边)用tarjan 模板求的

    #include<stdio.h>/* 求边双联通分量和求强连通差不多,先缩点求出叶子节点的个数 */ #include<string.h> #define N 5100 st ...

  10. 哈哈,找到一种方式来简单模拟EXTJS中与服务器的AJAX交互啦。

    一直在测试客户端的EXTJS,但遇到服务器端就麻烦了,要建库,要写JSON,要有HTTP返回值. 今天测试了一个简单的方法,经过测试是OK了. 那,就是Python的SimpleHTTPServer模 ...