POJ.2454.Jersey Politics(随机化算法)】的更多相关文章

题目链接 \(Description\) 将长为\(3n\)的序列划分成\(3\)个子序列,要求至少有两个子序列的和都\(\geq 500*n\),输出任一方案.保证有解. \(Solution\) 肯定是要将最大的\(2n\)个数分成两个满足条件的子序列. 直接贪心并没有什么可行的做法..(反正我想不出来) 我们考虑先随便地填满这两个序列,然后再随机交换序列中的两个数,直到最后满足条件为止. 交换两个序列中的某个数在多数情况下是有效的. 并不会证or别的说明了,反正我也没有更好的做法,就随机吧…
随机化算法+贪心! 将3*k排序后分成3分,将第二第三份的和分别加起来,让和与500*k比较,都大于则输出,否则,随机生成2个数,在第二第三份中交换! 代码如下: #include<iostream> #include<stdio.h> #include<cmath> #include<algorithm> using namespace std; struct an { int w,lab; }p[]; bool cmp(const an &a,c…
这个题目第一步还是比较明显的,先把最小的n个值去掉,剩下的问题就是能不能把数据分成两半,使得每一半和都大于n*500,这个刚开始考虑了下dp的做法,但是复杂度不满足要求. 那么能想到的就是搜索了,实际上这个搜索的上限还是比较高的,就只能依靠良好的剪枝试试了,两个情况,剩下的值全部选最大还小于要求,剩下的值全部选最小另一半还小于要求.0ms ac #include <iostream> #include <cstdio> #include <cstring> #inclu…
题解 有种迷一样的讽刺效果 每个城市有1000头牛,然后你现在知道对于自己政党每个城市的选票,把城市划分成三个州,保证在至少两个州内获胜 找出前2K大的然后random_shuffle,直到前K个加起来和后K个加起来都满足超过半数也就是K × 500 代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #…
方法1:暴力法 矩阵乘法+优化可以卡时间过的. 方法2:随机化 随机构造向量x[1..n],则有xAB=xC;这样可以将小运算至O(n^2). 代码如下: #include<iostream> #include<stdio.h> #include<cmath> #include<algorithm> using namespace std; ][],b[][],c[][],n,x[]; bool cal() { int i,j,k; ],an2[]; lon…
周三的算法课,主要讲了随机化算法,介绍了拉斯维加斯算法,简单的理解了为什么要用随机化算法,随机化算法有什么好处. 在处理8皇后问题的时候,穷举法是最费时的,回朔比穷举好点,而当数据量比较大的时候,如1000皇后问题,穷举的化有1000的1000次方,肯定超时,用随机化算法的思路,先随机的在棋盘上放一部分皇后,再来设计算法,会大大节省时间,使算法性能更加优良. 本篇介绍令一种随机化算法,舍伍德(Sherwood)算法. 题目: Matrix Multiplication Time Limit: 2…
                                                        Jersey Politics Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5592   Accepted: 1413   Special Judge Description In the newest census of Jersey Cows and Holstein Cows, Wisconsin co…
POJ2454——Jersey Politics 题目大意: 在泽西奶牛和荷斯坦奶牛的最新普查中,威斯康星奶牛在谷仓中获得了三个档位. 泽西奶牛目前控制着国家重新分配委员会. 他们想将国家分为三个相当大的投票地区,以便保证泽西奶牛在至少两个地区获得选举权. 威斯康星州有3 * K(1 <= K = = 60)个1000头牛的城市,编号为1..3 * K,每头都有泽西奶牛的已知数量(范围:1.001). 找到一种将州划分为三个区域的方式,每个区域都有K个城市,使得泽西奶牛在至少两个地区拥有多数比例…
Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? Input The first line of input contains a positive integer n (n ≤ 500) followed by the the three matrices A, B and C respectively. Each matrix's descript…
传送门 根据国家集训队2014论文集中胡泽聪的随机化算法可以通过这道题. 对于每个数,它有12" role="presentation" style="position: relative;">1212的概率在最后的答案序列中,这样我们每次随机出序列中的一个数,然后看它的因子有没有符合条件的更新答案就行了. 代码: #include<bits/stdc++.h> #define ll long long #define N 1000005…
题目大意:原题链接 给定三个n*n的矩阵A,B,C,验证A*B=C是否成立. 所有解法中因为只测试一组数据,因此没有使用memset清零 Hint中给的傻乎乎的TLE版本: #include<cstdio> #include<cstring> ][]; ][],C[][]; ][]) { ;i<=n;i++){ ;j<=n;j++) scanf("%d",&m[i][j]); } } int main() { scanf("%d&q…
题目大意:原题链接 给定n个节点,任意两个节点之间有权值,把这n个节点分成A,B两个集合,使得A集合中的每一节点与B集合中的每一节点两两结合(即有|A|*|B|种结合方式)权值之和最大. 标记:A集合:true  B集合:false 解法一:dfs+剪枝 #include<iostream> #include<cstring> using namespace std; int n,ans; ]; ][]; void dfs(int i,int cursum) { in[i]=tru…
Simulate Anneal模拟退火算法,是一种用于得到最优解的随机化算法. 如果可以打一手漂亮的随机化搜索,也许当你面对一筹莫展的神仙题时就有一把趁手的兵器了. 这篇题解将教你什么?SA的基本思路,什么时候能用SA. 标题是浅谈,所以本篇博客参杂了些许个人简介,若有疑问或异议,欢迎提出指正. 我也很感谢你们给出的建议,它们真的能让我变好.变强. 那么我们进入本篇正题. 1. 什么是模拟退火: 模拟退火是一种在广大的搜索空间寻找最优解的随机化算法.我们看名字就明白,这个算法实在模拟物理中退火的…
题目链接:Fruit Ninja 比赛链接:2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 题目描述 Fruit Ninja is a juicy action game enjoyed by millions of players around the world, with squishy, splat and satisfying fruit carnage! Become the ultimate bringer of sweet, tasty destruction wit…
题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高大上的做法,然后题解爸爸告诉我是随机化乱搞…… 首先可以把最小的k个去掉 然后将剩下的2*k个分成2组 接下来随机化交换它们中的两个数,并判断…… 只能说略猥琐…
Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17783   Accepted: 3845 Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? Input The first line of input contains a posit…
poj2454:http://poj.org/problem?id=2454 题意:给你3*k个数,然后让你分成三堆,使得至少其中的两堆中的数字之和大于500*k.题解:这道题一开始我并不知道怎么做,准备采用随机算法,初始化的时候使其分成3堆,然后每次从每一堆中rand一个数,依次的进行交换,但是交了几版,发现都是wa.最后才知道要用贪心.把数字进行降序排序,然后把前2*k个给两堆,只要前两堆都满足大于500*k,如果不满足,那么对于更小的数的组合就不可能满足了.然后最前两堆进行随机算法每次ra…
#include <cstdio> #include <cstdlib> #include <ctime> typedef long long int LL; inline bool qpow(int a,int x) { ,ans = ; while(b) { ) ans = (LL)ans*a%x; a = (LL)a*a%x; b >>= ; } ) return true; else return false; } inline bool rabin…
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 45077   Accepted: 16625 Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is ver…
意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本质是一种搜索算法,既然是搜索,就涉及到状态的转移. 在一般求最短路的spfa算法中,当到结点u时,对e(u,v)仅仅需做例如以下转移:if(d[v]>d[u]+w(e)) d[v]=d[u]+w(e).在跟一般的情况下.到结点u,对e(u,v)需做多种转移.比方这题中要考虑让e免费和不让e免费两种情…
问题: 如何能够在 n×n 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上. 分析: 这题常规的解法应该是回溯法,然而回溯法的话,要遍历所有的情况. 这里介绍一种随机化的算法: 我们先摆开头的几个棋子,然后剩下的棋子用回溯法来做,由于解空间树的头几层不用拿来遍历了,回溯的时候遍历的结点少了很多. 研究标明,随机摆开头的一半略少的棋子,可以很快得得到解.当然,这个算法是只能求出一部分的解的,但是在 n 很大的时候…
http://poj.org/problem?id=2449 K短路的定义: 1.如果起点终点相同,那么0并不是最短路,而是要出去一圈回来之后才是最短路,那么第K短路也是一样. 2.每个顶点和每条边都可以使用多次.(可以存在环和来回走) 给定起终点,求K短路的长度 然后求K短路使用A*算法,其估价函数f(n) = g(n)+h(n),h(n)是终点到结点n的最短路径,g(n)是起点到结点n的实际代价, 这样选择显然能满足A*估价函数的要求,g(n)>=g'(n), h(n)<=h'(n). h…
首先是当年stoer和wagner两位大佬发表的关于这个算法的论文:A Simple Min-Cut Algorithm 直接上算法部分: 分割线 begin 在这整篇论文中,我们假设一个普通无向图G=(V,E),其中每条边e都有一个正实数权值w(e). 如果我们知道:怎样找到两个节点s,t,以及怎样得到对于s-t的最小割,我们就几乎解决了整个问题: 定理2.1: 设s和t是图G中的两个节点,设G/{s,t}是合并s和t后得到的图, 则图G的全局最小割可以通过“图G对于s-t的最小割”和“图G/…
Domino Effect Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10325   Accepted: 2560 Description Did you know that you can use domino bones for other things besides playing Dominoes? Take a number of dominoes and build a row by standing…
  E - Oulipo Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3461 Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a memb…
http://poj.org/problem?id=3974 模板题,Manacher算法主要利用了已匹配回文串的对称性,对前面已匹配的回文串进行利用,使时间复杂度从O(n^2)变为O(n). https://www.cnblogs.com/xiaoningmeng/p/5861154.html 详细解释 https://www.zhihu.com/question/30226229 这是复杂度O(n)的解释 代码 #include<cstdio> #include<cstring>…
一.Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation amongst the stockbrokers to give your employer the tactical edge in the stock market. For maximum effect, you have…
传送门:http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS Memory Limit: 65536K Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K asteroids (…
题目链接: http://poj.org/problem?id=2195 解题思路: 把man和home都提取出来,然后算出每个man和home的距离算出来,然后建立匹配图,套用km算法的模板,求最小权值匹配,km模板一般是求最大权匹配,求最小的话,一般是取负,当然如果感觉取负逼格太low,也可以用下面的办法,改进模板. 代码: //写的代码太菜,不懂建立匹配图的时候为什么下表从零开始就会使劲wa,但是改成1就会ac,有看出来的小伙伴们请大声说出来,跪谢!!!!! //KM算法求完备匹配下的最小…
链接 Cow Contest Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Eac…