hihocoder编程练习赛52-2 亮灯方案】的更多相关文章

题目1 : 字符串排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 一般我们在对字符串排序时,都会按照字典序排序.当字符串只包含小写字母时,相当于按字母表"abcdefghijklmnopqrstuvwxyz"的顺序排序. 现在我们打乱字母表的顺序,得到一个26个字母的新顺序.例如"bdceafghijklmnopqrstuvwxyz"代表'b'排在'd'前,'d'在'c'前,'c'在'e'前…… 给定N个字符串,请你按照新的字母顺…
思路: 状态压缩dp.实现: #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ] = {, , -, }; ] = {, , , -}; int n, m; ll dp[( << ) + ]; char a[MAXN][MAXN], tmp[MAXN][MAXN]; bool check(int x, int y, int S) { ; i < ; i++) { int nx = x…
看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半边的点中有哪些连续数字,连续的数字就是一个[l, r]组合 就可以算出u这半边有哪些潜在的[l, r]组合 当然u这半边算好了,v这半边正好是u的数字反过来 这个过程可以使用set来统计,很好写 现在我们解决了对于一个边怎么算贡献 现在需要使用点分治 使用点分治求重心进行遍历保证了每个点至多被放入s…
题目1 : 序列 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个正整数 n, P,求满足以下两个条件的长度为 n 的序列 ai 个数: 1. 1 ≤ ai ≤ P 2. 不存在 1 ≤ l ≤ r ≤ n,满足al + al+1 + ... + ar 是 P 的倍数 由于方案数可能很大,你只需要输出方案数对 109+7 取模的值 输入 第一行两个正整数 n,P 1 ≤ n, P ≤ 104 输出 输出方案数对  109+7 取模的值 样例解释 满足条件的序…
第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0).每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K.按从小到大的顺序输出所有合法的N位号码,每个号码占一行. 思路:dfs #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N = 20; #define LL long long int n, k, a[N]; void…
题目1 : 工作城市分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 H公司在北京和上海两个城市各有一间办公室.该公司最近新招募了2N名员工,小Hi负责把这2N名员工分配到北京和上海各N名. 于是小Hi调查了新员工对于北京和上海的意愿,我们用Bi和Si表示.Bi代表如果分配第i名员工去北京,他的满意指数:Si代表如果分配去上海,他的满意指数. 小Hi想知道如何分配才能使2N名员工的满意指数之和最高. 输入 第一行包含一个整数N. 以下2N行每行包含两个整数Bi和…
题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有的玩具零件均在一块由N × M个单位块组成的设计板上切割获得.每个单位块有一个耐用指数aij. 由于玩具制作安全标准要求每个零件的面积至少大于等于S,小Ho想要知道设计板上能切割出满足标准的最大耐用指数的玩具零件为多少. 输入 输入共N+1行,第一行三个整数N,M,S表示设计板的大小以及安全标准中对…
题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 1,1 变成 0 现在小 Hi 想知道,至少需要多少次操作,才能将 n 变成 n-1 输入 一个正整数 n 1 ≤ n ≤ 109 输出 输出最少的操作次数 样例输入 10 样例输出 2 // 2018-07-29 #include <cstdio> #include <cstring>…
题目1 : 偶数长度回文子串 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串 输入 输入包含多组数据. 每组数据包含一行一个小写字母字符串 S 1 ≤ |S| ≤ 105 输出 对于每组数据如果存在,输出YES,否则输出NO 样例输入 cabbad ababa 样例输出 YES NO // 2018-07-29 #include <cstdio> #include <cstring> #…
题目1 : 相似颜色 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在CSS中我们可以用井号(#)加6位十六进制数表示一种颜色,例如#000000是黑色,#ff0000是红色,#ffd700是金色. 同时也可以将六位颜色#RRGGBB简写为#RGB三位颜色.例如#000与#000000是相同的,#f00与#ff0000是相同的,#639与#663399是相同的. 对于两个颜色#abcdef和#ghijkl,我们定义其距离是(ab - gh)2 + (cd - ij…
题目链接 给定一个长度小于1e5的字符串s,s中字符全是大写英语字母.现在要寻找s中有多少组邻近的"hio"字符串,邻近的定义如下:hi距离+io距离+ho距离小于k.输入k和s,求有多少组邻近的hio. 此题关键在于字符串是一维的序列,hi距离+io距离+ho距离必然是偶数,此距离必为hio中最左端字符和最右端字符距离的二倍. 由此,对于任意最左端字符,只需要保证最右端字符和最左端距离不超过k/2即可.使用二分查找解决. import java.util.ArrayList; imp…
题目链接 #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<iostream> #include<stdlib.h> #include<set> #include<map> #include<queue> #include<vector> #include<bitse…
思路: 树形dp. 实现: #include <bits/stdc++.h> using namespace std; ; int n, a[MAXN], in[MAXN]; vector<int> G[MAXN]; ]; bool vis[MAXN]; void dfs(int now) { vis[now] = true; ; i < G[now].size(); i++) { int tmp = G[now][i]; if (!vis[tmp]) dfs(tmp); d…
思路: 将字符串按照新的顺序映射之后再排序. 实现: #include <bits/stdc++.h> using namespace std; int main() { int n; string s, t; cin >> n >> t; map<char, int> mp; ; i < t.length(); i++) mp[t[i]] = i; vector<string> str; ; i < n; i++) { cin &g…
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望选择若干道不同的菜品,使得总价在不低于X元的同时尽量低. 你能算出这一餐小Ho最少消费多少元吗? 输入 第一行包含两个整数N和X,(1 <= N <= 20, 1 <= X <= 100) 第二行包含N个整数A1, A2, ..., AN.(1 <= Ai <= 100)…
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素,从小到大放在队列中,再把b按顺序放入另一个队列中,每次取出两队列中较小值即可. #include<bits/stdc++.h> using namespace std; typedef long long ll; ]; queue<int>q1, q2; vector<int&g…
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 "你已经是一个成熟的孩子了,要学会自己烹饪了!" 小 Y 上山拜师学艺,经过 年之长的厨艺练习,已成为当世名厨,今天他接受邀请,在众人面前展示自己高超的厨艺. 人们给小 Y 提供了 种食物,每种食物无限量供…
hihocoder编程收割赛20 hihocoder1542 : 无根数变有根树 hihocoder1542 思路: 树的遍历 ac代码: // hihocompete20_01.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include<cstdio> #include<string> #include<algorithm> #include<qu…
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析…
[Offer收割]编程练习赛44 对于第一题题目1 : 扫雷游戏,首先要想清楚思路,虽然是暴力算法,但是这八个方向要自己把坐标写正确,不要慌乱,自己写的时候就写错了一个,第二个就是判断的时候,j + 1>=0,这种是显然的事情,应该是j +1 < N,写草稿也要认真. 还有一个非常非常大的错误. ; cin >> N; vector<string> input; input.resize(N); ; i < N; ++i) { string tmp; cin &g…
思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = sum{ dp[k] | 1 < k < i && sum(k+1,i)!=0 } = sum{ dp[k] | 1 < k < i } - sum{ dp[k] | 1 < k < i && sum(k+1,i)==0 } 关键是求后半部分怎…
A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把第i行列和第j行列去掉,再求剩下的a[i]+a[j]数就是解 用容斥,要把(i,i)(i,j)(j,i)(j,j)加回来,想o(n3),结果tle 结果发现求结果时只求a[i]+a[j]个数就行了,只需改变跟a[i]+a[j]有关的计数就可以了. 还要有一个计数器,储存每个数字分别有多少个 然后直接…
题目1 : 九宫 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi近期在教邻居家的小朋友小学奥数.而近期正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不反复的填入一个3*3的矩阵其中,使得每一行.每一列和每一条对角线的和都是同样的. 三阶幻方又被称作九宫格,在小学奥数里有一句很有名的口诀:"二四为肩,六八为足.左三右七.戴九履一.五居当中".通过这种一句口诀就行很完美的构造出一个九宫格来. 有意思的是,全部的三阶幻方,都可以通过这样一个九宫…
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和B应该都能AC的,但是A题由于脑子二笔了一下,最后终测T掉了.不过很奇怪,最后分数也没有跌,反而涨了,终于要接近紫名了,下一发不跌的话,应该有紫了.然后说一下这场Hihocoder吧,据说有offer面试名额,然后选了网易游戏和微软,虽然很是想去微软的,但是又二笔了几发,这就这样了.. A题:九宫(…
题目 用 $1,2 ,3 \dots, N$ 代表 $N$ 首歌.设想有 $L$ 个格子排成一排,编号 $1$ 到 $L$ .考虑将这些数字挨个填进格子里的情形.假设当前要往第 $i$ 个格子里填一个数字(此时前面 $i-1$个坑里都已经填上数字了)若只考虑相邻两个数字不能相同这个条件,则第 $i$ 个格子有 $N-1$ 种填法.不难想到我们还需要知道前 $i-1$ 个格子里填了多少种数字(即多少个不同数字). 以下描述中,"相邻两个数字不同"这一条件总是满足,不再重复. 以 $f(i…
公平划分 若条件满足,则所有数异或和为零,这时候随便分都可以,答案为2^n-2,否则答案为0 #pragma comment(linker, "/STACK:102400000,102400000") #ifndef ONLINE_JUDGE #include "stdafx.h" #else #include<bits/stdc++.h> #endif using namespace std; typedef long long lint; typed…
1-偏差排列 斐波那契数列 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iostream> #include<map> #include&…
题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x值是多少.这里还要再辅助一个val[k]表示处理到当前情况只错了k次的最小值是多少因为改变的不止是和弦还有初始值,可以看一下代码理解一下. #include <iostream> #include <cstring> #include <cstdio> #include &…
子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常规的定义) 性质好题 看起来无从下手. 两个关键性质: 证明挺显然的.画画图 同余方程exgcd即可 子矩阵和? 先算出(0,0)的,每次平移,加减一行一列前n或m个, 细节: 1.纵向要循环到n,横向循环到m 2.注意开long long 3.反常规的设定真讨厌 #include<bits/std…
第一次做这种比赛,被自己坑的好惨... A.这道题的关键其实是如果有k和n满足kD+F>nL>kD则不能走无限远,分支看似难整理,其实比较简单,F>L根本就不用算了,明摆着就是Bsi强迫症的 L和D有倍数约数关系的也比较简单 剩下的就可以规约为kD%L>L-F,如果有k能让此式成立,那强迫症就被Bsi. 注意到kD%L的排布有倍数规律,一定是gcd(D,L-D)的倍数 然后求模数是否能到达L-F就是了 #include<cmath> #include<cstdio…