题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2339 解题报告:题目太长了,比赛的时候根本看不懂,完了之后问了什么意思,发现好简单,就是输入n个数据,把这n个数据放入一个集合中,然后每次从集合中取出两个最小的数,求出他们的和,并且把这个和加入到结果当中 ,并且要把这个和放入到集合当中,然后再次从集合中取出两个数,就这样一直做,直到这个集合为空.其实就是用一个最小堆,然后每次从堆里面去粗两个数,求和再把这个和插…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2343 解题报告:首先我假设最后的正确的结果是a[1] , a[2] ,a[3] ....a[i];然后我们先把这M个金币完全按照x[i] / Y的比例先预分配一下,分配的同时,统计出分配结束后还会剩余多少个金币,假设第一轮分配之后每个人得到的金币数量分别是k[1],k[2],......k[i],那么可以确定的是 a[i] - k[i] 是等于0或者等于1的,也…
题目大意:在一条X轴上,有若干个正方形,并且保证这些正方形的中心都在X轴上,然后输入n个正方形的中心的X坐标,和正方形的边长,现在要再插入一个正方形,要求是,新插入的正方形至少要有一条边与原来的正方形的一条边重合,然后输入新插入的正方形的边长,问一共有多少种插入的方法. 解题报告:模拟题,我的做法是用一个结构体保存每个正方形的中心的X坐标和正方形的边长,然后再把所有的正方形按照中心的X坐标从小到大排一次序,然后从前往后扫描一遍,当两个相邻的正方形之间的距离大于要插入的正方形的边长的时候,说明在这…
Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走向的“市河”.C 市的市长打算在“市河”的其中一条岸边自东往西的 n 个位置(可以将这 n 个位置看成在一条直线上,且位置不会重叠)依次建造高楼. C 市的设计部门设计了 T 个方案供市长挑选(方案编号为 到 T).每个方案都提供了建造的每幢高楼的高度,自东向西依次为 h1,h2,h3,…,hn-,…
解题报告:n个人围坐成一圈,并且将这n个人从1到n编号,然后编号为1 的人手上有一个物品,将这个物品往向左传递给第k个人,1<=k<=n/2,当这个物品再次传到编号为1 的人的手上时,游戏结束,要使这个k最大,并且,在游戏结束后要求每一个人都要拿过这个物品,求这个最大的k. 看了一下就猜想大概就是在n/2附近去找,然后做了几个小的数字分析了一下,发现猜想没有错误,不过不能证明,这题还有一个到现在还是很困惑的地方,为什么我的代码数组一定要开到20000,本来开到2000就够了,但我的一定要开到2…
今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You've got an array a, consisting of n integers: a1, a2, ..., an. Your task i…
题目大意:有n个队伍之间比赛,每两个队伍之间都有一场比赛,因此一共有n(n-1) / 2场比赛,但是这里丢失了一场比赛的记录,现在让你通过n(n-1) /2 -1场仍然存在的比赛记录来判断丢失的那条比赛记录 是什么. 解题报告:因为每两个队伍之间都有一场比赛,所以每个队伍都应该有n-1次比赛,所以只要统计存在 的记录里面各个队伍出现的次数就可以了,判断出现次数不足n-1次的两个队伍便是丢失记录上的那两个队伍.然后统计一下判断出来的这两个队伍的胜利的次数,次数多的说明也是这场比赛胜利的队伍. #i…
解题报告:一开始不知道ATA的意思,后来才知道原来是转置矩阵乘以原来的矩阵.这题说起来比较麻烦就不说了,直接上代码: #include<cstdio> #include<cstring> #include<iostream> using namespace std; ]; int main() { int T,n,m; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&am…
Contest1585 - 2018-2019赛季多校联合新生训练赛第一场 C 10187 查找特定的合数 D 10188 传话游戏 H 10192 扫雷游戏 C 传送门 题干: 题目描述 自然数中除了能被1和本身整除外,还能被其他数整除的数叫合数.每个合数都可以写成几个质数相乘的形式,这几个质数都叫做这个合数的质因数.比如8=××,2就是8的质因数.在1—N(N≤)按从小到大顺序排列的自然数序列中,查找第M个有X(≤X≤)个不同质因数的合数.例如,第3个有2个不同质因数的合数是12(12只有2…
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之前的状态. 回退的时候,如果暴力点,就直接将每步所操作的线段树都存下来,然后直接翻阅回去,这种方法虽然简单,但是对空间和时间的需求太大了,肯定不能过. 所以这时候我们就可以选择可持久化操作. 可持久化是数据结构里面的一种方法,其总体就是把一个数据结构的历史状态全部都保存下来,从而能够快速的查找之前出…
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]ImpossibleGame…
HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有m个限制,每次限制要求在区间[l,r]内不同的点的个数是为x个,问你填完这n个空的并且满足限制的方案数 题解: 定义\(dp[i][j][k][t]\)表示在区间填完前t个位置后,{0,1,2,3}这四个数字最后一次出现的位置为i,j,k,t的方案数 滚动数组优化掉第一维后,我们转移如下 dp[p]…
HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末尾添加一个数 2.查询区间异或最大值 强制在线 题解: 暴力的做法可以用数据结构维护区间线性基,但肯定过不了. 贪心地维护序列的前缀线性基 (上三角形态),对于每个线性基,将出现位置靠右的数 字尽可能地放在高位,也就是说在插入新数字的时候,要同时记录对应位置上数字的出现位 置,并且在找到可以插入的位…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2559 解题报告:比赛的时候的想法是可以确定至少有两对相切的圆,所以我的做法是枚举其中的两对圆相切,还好,这样只要枚举3次就够 了,然后设其中一个圆的半径为x,然后其他的两个圆的半径就知道了,然后另外一条边的边长减去这条边上的两个圆的半径等于0就可以得出x也就求出了三条边的大小,然后求出这三种情况下的半径的总和是多少,输出最大的那种情况下的三个半径的长度就是了.还…
A.给出一个字符串,求出连续的权值递增和,断开以后权值重新计数,水题 #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<algorithm> #include<queue> #include<sta…
题目描述 Description 精灵心目中亘古永恒的能量核心崩溃的那一刻,Bzeroth 大陆的每个精灵都明白,他们的家园已经到了最后的时刻.就在这危难关头,诸神天降神谕,传下最终兵器——潘少拉魔盒.然而当精灵们准备打开魔盒时,魔盒的守护灵出现在精灵们面前:“如果你们想要拯救世界,必须要先解决这个困难的问题:定义一个 N 阶数列 A 为神奇数列当且仅当对所有2≤i≤N−1 ,都有 Ai−1+Ai+1≥2×Ai.现在有一个N阶正整数列B ,请计算将 B 数列均匀随机打乱之后,得到的数列是神奇数列…
把以前的题补补,用悬线求面积第二大的子矩形.我们先求出最大子矩阵的面积,并记录其行三个方向上的悬线长度.然后排除这个矩形,记得还得特判少一行或者少一列的情况 #include <bits/stdc++.h> using namespace std; ; int n; int mat[maxn][maxn],Left[maxn][maxn],Right[maxn][maxn],up[maxn][maxn]; int main() { int T; T=; while(T--) { int m,n…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可以工作的最长时间和一个可以完成的任务的难度的最大值, 一台机器能完成一个任务的条件是这台机器的最长工作时间和能完成任务的难度值必须都大于等于这个任务,而且一台机器最多完成一个任务,假设一个任务的时间为t,难度值为x,那么完成这个任务可以赚到的钱 money = 500 * t + 2 * x; 现在…
比赛链接 A题是KMP,先把A拼接到B的后面,然后利用next数组的意义(包括其具体含义,以及失配时的应用),得到ans #include<bits/stdc++.h> using namespace std; ],S[]; int tlen,slen; ]; void getNext() { ,k=-; Next[]=-; while(j<tlen) ||T[j]==T[k]) Next[++j]=++k; else k=Next[k]; } int cal(int x) { ; )…
[A-H国的身份证号码I] 用N个for语句可以搞定,但是写起来不方便,所以搜索. dfs(w,num,p)表示搜索完前w位,前面x组成的数位num,最后以为为p. 如果搜索到第N位,则表示num满足条件. 最后把所有满足条件的a[]排序后输出. #include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> #include<cstring> #include&…
Problem Description There are n people and m pairs of friends. For every pair of friends, they can choose to become online friends (communicating using online applications) or offline friends (mostly using face-to-face communication). However, everyo…
题目链接 传送门 题意 总共有\(2n\)个人,任意两个人之间会有一个竞争值\(w_{ij}\),现在要你将其平分成两堆,使得\(\sum\limits_{i=1,i\in\mathbb{A}}^{n}\sum\limits_{j=1,j\in\mathbb{B}}^{n}w_{ij}\)最大. 思路 看到这一题第一想法是状态压缩然后枚举状态,然后人就没了. 其实这题就是个普通的\(dfs\),假设在枚举第\(i\)个人时,前面已经有\(tot1\)个人分进了\(\mathbb{A}\),\(t…
题目链接 传送门 题意 求在\(n\times m\)的\(01\)子矩阵中找出面积第二大的内部全是\(1\)的子矩阵的面积大小. 思路 处理出每个位置往左连续有多少个\(1\),然后对每一列跑单调栈,记得处理由同一矩阵贡献的面积. 代码实现如下 #include <set> #include <map> #include <deque> #include <queue> #include <stack> #include <cmath&g…
传送门 Solution A. 一共有\(T\)组数据 每次询问你\([l,r]\)中有多少个数能被他的所有数位整除(如果数位中含有\(0\)忽略掉) 数位dp,咕咕咕 B. 题面略 考虑一个个只有两个元素组成的小区间 可以发现若选择\([l,l+1]\),则必定要选择一个最大的区间包含\([a[l],a[l+1]]\)的区间 每个小区间看成一个点,向它所要求必须要选择的点连边,线段树优化建图 对图进行tarjan缩点,然后拓扑排序即可 全是区间询问,大概要有5棵线段树的样子 其实有简单得多的解…
I题  Points Division 题意: 给你n个点,每个点有坐标(xi,yi)和属性(ai,bi),将点集划分为两个集合, 任意 A 集合的点 i 和 B 集合点 j, 不允许 xi >= xj 且 yi <= yj. A 集合的点使用权值 ai,B 集合的点使用权值 bi​,求: 思路: 可以用一条自底向上的折线将这些点分为两组,折线左上为A集合,右下B集合,折线上的点也属于B集合 dp[i] 代表 当前点i在折线上时权值和的最大值 那么对于当前点i来说: i点之前,y坐标小于yi的…
A.count 本场比赛最难的题... 隔板法组合数容斥 xjb 搞搞就好了 //by Judge #include<cstdio> #include<iostream> #define Rg register #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i) #define ll long long using…
A - Score UVA - 1585 水 #include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; while(n--){ ; string s; cin>>s; int len=s.size(); ; ;i<len;i++){ if(s[i]=='O')sum+=tmp,tmp++; else { sum+=tmp; tmp=; } } sum+=tmp; cout<…
一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢.后来果断百度了一下. 悲催啊... 题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向文章头,']'代表光标移向文章尾,问最终在屏幕上显示的字符串序列是什么 思路:直接模拟一下即可,不过因为由于会可能移动到字符串开头以及结尾,所以我开了3个char数组. str1存储由于'['的原因而打印在开头的字符,str3存储由于']'的原因打印在结尾的字符,str2则是存储一开始在没遇到'['…
题意:将点放在两个集合,同一个集合的边保留,不同集合的边删去,使得边至少减少一半.  输出任何一种方案即可.如果不能,输出Impossible 思路:设如果两个人为一对捣蛋鬼,则two[i][j]=two[j][i]=1,即用边表示关系  刚开始设集合为A.B,为空集.然后每次取一个点,往集合里加,加入到哪个集合使得增加的边最少就加入到那个集合中. #include <iostream> #include <stdio.h> #include <string.h> #i…
题意:求一棵树中不在一条链中的三个点的对数. 转化一下,用总对数减去在一条链上的三点对数即可. 考虑经过根节点,然后可能是不同的子树中各选一个:或者是子树中选一个,然后当前节点为根的子树以外的节点选一个. 这样不重不漏 代码简单. #define maxn 100005 struct node { int v,next; }; node e[maxn * ]; int head[maxn]; int cnt ; i64 ans ; i64 sum ; i64 sz[maxn]; i64 n ;…