fafu 1411】的更多相关文章

想了好久都没想到怎么去判断当分类dp的时候大于或者等于要求的 值时应该怎么半 后来经过停了 qlx的想法 然后就 敲了出来 这题说的是 一个整数 分解成几个素数的和  按这个数的含有的最大素数 进行排列给定的一个数 小于200 求这个数的 第k大的数是什么,然后让你计算出 第k大是组成数是什么. 分类进行dp 比如起始位进行dp  分类进行的dp可以按照从小到大的排列进行 大的数 只能用比他小的数 进行dp 类似于完全背包,这样在查找的时候也分类进行查找记得从大到小查找ok #include <…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1411 [题意] N个硬币放在一个有2*N个位置的圆桌上,求T次操作后的情况.对于一个操作,如果两边都是正或都是负,则在中间放一个负,否则放一个正. [思路] 把正设为0,负设为1,则一个硬币的状态为两边硬币的抑或. 把两次操作看作一次,则一次操作后硬币只有状态发生改变而位置不会改变. 通过数学归纳法得到:一个硬币的状态在操作2^k后是其左右两边与其相距2^k的硬币的抑或.直观的看,就…
Young naturalist Bill studies ants in school. His ants feed onplant-louses that live on apple trees. Each ant colony needsits own apple tree to feed itself.Bill has a map with coordinates of n ant colonies and napple trees. He knows that ants travel…
UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一次完美匹配就能够了 代码: #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int MAXNODE = 1…
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 897  Solved: 394[Submit][Status][Discuss] Description Orez很喜欢玩游戏,他最近发明了一款硬币游戏.他在桌子的边缘上划分出2*n个位置并按顺时针把它们标号为1,2,……,2n,然后把n个硬币放在标号为奇数的位置上.接下来每次按如下操作:在任意两个硬币之间放上一个硬币,然后将原来的硬币拿走:所放硬币的正反面…
动态规划:...翻牌FAFU 1395 动态规划…
http://acm.fafu.edu.cn/problem.php?id=1136 根据dp建边,建边的时候记得判断如果原本数的大小就ok了 好久没在自家OJ上刷了 #include <iostream> #include<string.h> #include<cstdio> #include<queue> #include<vector> //称这个机会吧EK 和DINIC都写一遍复习一下; using namespace std; int…
下面给出两道POJ上的问题,看如何用穷举法解决. [例9]Calling Extraterrestrial Intelligence Again(POJ 1411) Description A message from humans to extraterrestrial intelligence was sent through the Arecibo radio telescope in Puerto Rico on the afternoon of Saturday November 16…
uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louses that live on apple trees. Each ant colony needs its own apple tree to feed itself. Bill has a map with coordinates of n ant colonies and n apple tre…
题目链接:http://poj.org/problem?id=1411 题目大意:找两个素数p,q满足a/b<=p/q<=1 且p*q<=m,求p*q最大的一组素数对. 第一次想的是筛素数,然后枚举,后来发现没有超时(汗,这让我们写正解的很GG). 正解是先筛素数,然后用mul数组对于两个素数的积存下较小的那个素数.最后从m向下枚举. 枚举代码: #include<cstdio> #include<cmath> #include<cstring> #i…
有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. 创建学生类: 学生:Student 成员变量:name,age 构造方法:无参,带参 成员方法:getXxx()/setXxx() 分析: A:创建学生类. B:创建学生数组(对象数组). C:创建5个学生对象,并赋值. D:把C步骤的元素,放到数组中. E:遍历学生数组. 学生类: package zl_ObjectTest1; public class Student { //成员变量 private St…
Calling Extraterrestrial Intelligence Again Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11211   Accepted: 4356 Description A message from humans to extraterrestrial intelligence was sent through the Arecibo radio telescope in Puerto…
给定一个m行n列的矩阵,你可以从任意位置开始取数,到达任意位置都可以结束,每次可以走到的数是当前这个数上下左右的邻居之一,唯一的限制是每个位置只能经过一次,也就是说你的路径不自交.所经过的数的总作为你的得分,求最大的得分. Input 第一行两个整数m, n (0 < m, n < 10),表示矩阵的行数和列数. 后面m行,每行n个整数表示矩阵里的数,整数范围[-10000000, +10000000]. Output 一个整数表示最大得分. 插头dp,状态可以用滚动数组存 #include&…
#include<iostream> #include<stdio.h> #include<math.h> #define MAXN 50000 using namespace std; void give_list(); ] = {}; ; int main() { //freopen("acm.acm","r",stdin); int i; int j; double m; double a; double b; give_l…
由于涉及到实数,一定,一定不能直接等于,一定,一定加一个误差<0.00001,坑死了…… 有两种事物,不难想到用二分图.这里涉及到一个有趣的问题,这个二分图的完美匹配的最小权值和就是答案.为啥呢?因为如果有四个点,a,b,c,d .Ab和cd交叉,ac和bd不交叉,那么ac和bd的长度和一定小于ab和cd的长度和,可以画一个图很容易就证出来.所以,如果所有的边都不交叉,又因为有解,那么最小的权值和就是解了.附图一枚,自己画的,比较简陋,凑活着看吧…… 用KM算法求最佳完美匹配最小权值和,可以直接…
Description:   You are given a matrix which <= n <= m <= ). You are supposed to choose n elements, there element element in the same column. What is the minimum value of the K_th largest in the n elements you have chosen.   Input:   First line ),…
题目链接 单点更新, 区间查询. 这题空间好小.... #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <map> #include <set> #include <string> #include <…
题意:给你数m,a,b,假设有数p,q,满足p*q<=m同时a/b<=p/q<=1,求当p*q最大的p和q的值 方法:暴力枚举 -_-|| and 优化范围 我们可以注意到在某一个m值得情况下,有一些小于m的值的质数根本不可能去到 以m=1680 a=5 b=16来举例,假设当前枚举的质数为x 那么既然选了这个x必然另外一个质数不可能小于x*5/16所以就可以得到一个方程 5/16*x^2<=1680 这样可以解出x=73.....(取整) #include <iostrea…
题意: 一个平面上有n个黑色的点,n个白色的点,要求黑色的点与白色点之间一一配对,且线段之间不相交. 思路: 线段不相交并不好处理,想了很久想不出,所以看了蓝书的讲解. 一个很明显的结论是,不相交的线段一定比相交的线段短,如图:一个较为直观的例子. 由于点之间一一对应,所以肯定用二分图匹配,然后要使得所有线段之和最短,那么就是求一个带权最小匹配,上KM算法解决. 把所有的边权取负值,求最大匹配即可. 代码: #include <stdio.h> #include <math.h>…
题目大意: ·给你一个n,表示输入n个白点和n个黑点(输入每一个点的坐标).现在需要将各个白点和各个黑点一一用线段连接起来,需要满足这些线段不能够相交. ·特色: 我们如何保证线段间不相交. ·分析: 由"黑白"可以想到用二分图匹配(最大流问题亦可).用到一个神秘结论,可以巧妙地将"相交"和"不相交"转化为具体数值大小关系,进而转化为权值.结论为:[四边形两条对角线的和必定大于它任何一组对边的和] 用一下这幅图进行分析:           下面…
参考博客 紫薯P230 题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点. 紫薯思路:找出y坐标最小的点,如果多个,考虑x最小的.将其他点相对于这个点按极角从小到大排序,然后开始扫描,当白点和黑点一样多时(算上最下面的点),第一个和最后一个匹配,然后递归匹配中间的和外边这两部分 #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #in…
叉积的运用 ,不断的用叉积去判断 最小的拼图, 刚开始对点进行排序,每个人的排序规则不同做法可能不同,我是按照点的x轴进行x轴相同用y小的在前面,然后每个点按照最下的点开始进行查找 每次从一个点出发然后结束后无论找不找到都得 将出发的那条边删掉,ok然后就可以不断的去瓜分这张大的图, #include <iostream> #include <cstdio> #include<string.h> #include<cmath> #include<alg…
https://vjudge.net/problem/UVA-1411 题意:n只蚂蚁和n颗苹果树,一一配对并且不能交叉. 思路:这就是巨人与鬼的问题.用分治法就行了. #include<iostream> #include<algorithm> #include<set> using namespace std; int n; ; int vis[maxn]; struct node { int x, y; int id; int flag; }ans[maxn];…
题意: 给出n个白点和n个黑点的坐标,要求用n条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段 解析: 带入负的欧几里得距离求就好了 假设a1-b1 与 a2-b2相交 则dis(a1, b1) + dis(a2, b2) 一定大于 dis(a1, b2) + dis(a2, b1) 四边形的对角线一定大于两条对边... 所以..边的权值取负的欧几里得距离..来一次km就好了   km是求最大  而负的最大 对应整的最小 而整的最小 又能对应不相交…
校庆神秘建筑 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2087    Accepted Submission(s): 693 Problem Description 杭 州电子科技大学即将迎来50周年的校庆,作为校庆委员会成员的我被上级要求设计一座神秘的建筑物来迎合校庆,因此我苦思冥想了一个月,终于设计出了一套方 案,这座建筑物有…
题目描述: 在一个有向图有n个顶点(编号从1到n),给一个起点s,问从起点出发,至少经过一条边,回到起点的最短距离. 输入: 输入包括多组,每组输入第一行包括三个整数n,m,s(1<=n<=500,0<=m<=10000,1<=s<=n),接下来有m行,每行包括三个整数a,b,c(1<=a,b<=n,1<=c<=1000),表示有一条a到b的边,长度为c. 输出: 对每组输入.输出最短距离,如果没有这个一条路径输出"help!"…
https://codeforces.com/contest/958/problem/E3 当没有三点共线时,任意一个这样的点集都是保证可以找到答案的,(考虑任意一种有相交的连线方案,一定可以将其中两条相交的连线改成不相交的,并使得连线的总长度变小:显然连线的总长度最小的方案一定存在,则这种方案一定没有连线相交) 因此可以有一个分治做法:先在当前点集中找出最左.最下的点,找出一个点与其配对,使得以这两点间连线所在的直线划分开点集后,两边各自都满足白点数等于黑点数:显然一定能找到这个与其配对的点…
题目大意: 希望在 k 步之内,将尽可能多的1移到相邻的位置上 这里依靠前缀和解决问题 我们用pos[i]保存第i个1的位置,这里位置我以1开始 用sum[i]保存前 i 个1从 0 点移到当前位置所需的步数 每次进行判断能否将 st 号 到 la 号的1移到相邻位置,我们要先清楚,为了使移动步数最少,我们需要固定中间的数保持它的位置不动,将两边的数向它靠拢 那么移动的步数就分为左右两侧 中间的数编号为 m = (st + la)>> 1 首先将左侧移到中间,将 m 也作为其中的一部分,我们先…
非常奇怪的是,我在Vijos 1071能AC,在caioj 就只有50分 可以和前面一道题一样算方案,如果大于1就是多解 然后就输出方案就好了 #include<cstdio> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 112; const int MAXM = 212345; int w[MAXN],…
#include <bits/stdc++.h> using namespace std; inline void read(int &num) { char ch; num = 0; int flag = 1; while((ch=getchar()) < '0' || ch > '9')if(ch == '-') flag = -flag; while(ch >= '0' && ch <= '9') num = num*10 + ch-'0'…