[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城市的武器是一艘歼星舰,这艘歼星 ...
随机推荐
- (转)C#开发微信门户及应用(3)--文本消息和图文消息的应答
http://www.cnblogs.com/wuhuacong/p/3622636.html 微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习 ...
- Swift Pointer 使用指南
Overview C Syntax Swift Syntax Note const Type * UnsafePointer<Type> 指针可变,指针指向的内存值不可变. Type * ...
- uni-app的专属强大自适应单位upx,但是这个这是一个大坑,不能动态赋值解决办法
uni-app 使用 upx 作为默认尺寸单位, upx 是相对于基准宽度的单位,可以根据屏幕宽度进行自适应.uni-app 规定屏幕基准宽度750upx. 开发者可以通过设计稿基准宽度计算页面元素 ...
- canvas画弧线
arc(x, y, radius, startRad, endRad, [anticlockwise]) 在Canvas画布上绘制以坐标点(x,y)为圆心.半么为radius的圆上的一段弧线.这段弧线 ...
- 5G vs AI谁更有前途?
5G vs AI谁更有前途? 5G通信技术和AI人工智能技术是两个不同层面的技术领域,而它们两者都将在未来20年内对世界的发展有着革命性和里程碑式的影响.未来5G和AI谁更有前途呢? 5G技术的发展和 ...
- 编写输出Hellow word!
打开java运行环境(eclipse),然后输入以下语句,点击编译运行后即可输出“Hello World,”. public class HelloWorld { public static void ...
- GOF23设计模式之代理模式
GOF23设计模式之代理模式 核心作用:通过代理,控制对对象的访问.可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(即:AOP的微观实现) AOP(Asp ...
- GOF23设计模式之适配器模式
GOF23设计模式之适配器模式 结构型模式: 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类:适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式. ...
- python 用PIL Matplotlib处理图像的基本操作
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...
- 今天玩了tensorflow playground,太好玩了
先上地址: http://playground.tensorflow.org 我试了一个最复杂的,螺旋形的.开始怎么训练都不行.后来我多加了几个神经元,居然能训练成功了.真是太牛逼了!