UVA - 1614 Hell on the Market(贪心)】的更多相关文章

Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description   Most financial institutions had become insolvent during financial crisis and went bankrupt or were bought by larger institutions, usually by banks.…
题意:给定一个长度为 n 的序列,满足 1 <= ai <= i,要求确实每一个的符号,使得它们和为0. 析:首先这一个贪心的题目,再首先不是我想出来的,是我猜的,但并不知道为什么,然后在网上搜了一下题解,是什么数学归纳法...... 贪心策略:1~i的和或者部分和一定能凑出来1~sum[i]. 利用这个策略,也就是说,只要最后和是偶数,那么就一定有解,那这个解怎么求呢??我们先把所有的数从大到小排序,然后逆向计算,如果前 i-1 项和大于0, 那么就减掉第 i 项,否则就加上第 i 项,这样…
uva 1614奇怪的股市(归纳法证明,贪心) 输入一个长度为n的序列a,满足\(1\le a_i\le i\),要求确定每个数的正负号,使得所有数的总和为0.例如a={1, 2, 3, 4},则4个数的符号分别是1, -1, -1, 1即可.但若a={1, 2, 3, 3},则无解.n<=1e5. 这道题相当于要找到两堆相等的数.若序列中数的总和为奇数,那么拆出来的两堆数无论如何都不可能相等,所以无解.由于这道题的特殊性质,可用归纳法证明总和为偶数时一定有解. 现在要证明,用前i个数的全部或部…
Uva 11729  Commando War (简单贪心) There is a war and it doesn't look very promising for your country. Now it's time to act. You have a commando squad at your disposal and planning an ambush on an important enemy camp located nearby. You have N soldiers…
uva 1153 顾客是上帝(贪心) 有n个工作,已知每个工作需要的时间q[i]和截止时间d[i](必须在此前完成),最多能完成多少个工作?工作只能串行完成,第一项任务开始的时间不早于时刻0. 这道题算比较难的贪心了.解法是维护一个关于所有选择的时间的大根堆.将所有工作按照截止时间排序(将二维问题转化为一维问题),然后依次考虑每一个工作.如果当前的总时间t,加上当前工作的时间t1,小于等于当前工作的截止时间d1,那么直接把当前工作加入大根堆中.如果t+t1>d1,说明如果做这个工作,就超时了,所…
先证明一个结论吧,对于1≤ai≤i+1,前面ai个数一定可以凑出1~sum[i]中的任意一个数. 对于i=1显然成立, 假设对于i=k结论成立,那么对于i=k+1来说,只要证明sum[k]+i,1≤i≤ak+1可以凑出来就行了. 因为sum[k]+i≥k+1,且1≤ak+1≤k+1,所以可以先选一个ak+1,剩下的0≤sum[k]+i-ak+1≤sum[k]一定是可以由前面的数字凑出来的. 这就证明了贪心的正确性. #include<bits/stdc++.h> using namespace…
题意:有一个长度为N的序列A,满足1≤Ai≤i,每个数的正负号不知.请输出一种正负号的情况,使得所有数的和为0.(N≤100000) 解法:(我本来只想静静地继续做一个口胡选手...←_← 但是因为这题的贪心实在是太厉害了!我就单看,就盯了题解半小时以上...而代码又那么短,我就打了代码了...其实我又不太理解为什么一定要排序.) 贪心部分的理论依据:前i个数可以凑出1-sum[i]的所有整数. 证明:第二类数学归纳,n=1时成立,假设n=k之前所有项都成立,当n=k+1时.sum[k+1]=s…
这道题我苦思冥想了一个小时, 想用背包来揍sum/2, 然后发现数据太大, 空间存不下. 然后我最后还是去看了别人的博客, 发现竟然有个神奇的结论-- 幸好我没再钻研, 感觉这个结论我肯定是想不到的-- 结论是:在1 <= a[i] <= i时, 前i个数一定可以凑出1~sum[i]的所有整数 证明看这 https://blog.csdn.net/wcr1996/article/details/43957461 其他博客写有了这个结论, 就排序一下, 从大到小, 凑sum/2, 能凑就凑, 最…
题意:输入一个长度为n(n<=100000)的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0. 分析: 1.若总和为0,则未加符号之前,所有数之和必为偶数. 2.现在考虑是否有一部分数的和能等于sum/2. 方法:cnt[i]为数字i的个数,(当前的sum)/i为需要凑出当前的sum需要有多少个整数i,两者的最小值就是实际用的i的个数,即use[i].(use[i]为0的情况:1.枚举过程中,不存在i这个数.2.i大于当前的sum,所以凑出sum/2不能使用i…
UVA 538 - Balancing Bank Accounts 题目链接 题意:给定一些人的欠钱关系,要求在n-1次内还清钱,问方案 思路:贪心,处理出每一个人最后钱的状态,然后直接每一个人都和最后一个人操作就可以 代码: #include <cstdio> #include <cstring> #include <iostream> #include <string> #include <map> using namespace std;…
Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major problem. The shores of Rellau Creek in central Loowater had always been a prime breeding ground for geese. Due to the lack of predato…
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2075 题意 n皇后类似的n(n<=5000)车,每个车所在的行列上不能有其它车,n*n棋盘放n个车. 现在约束第i个车只能放在[xli, xri], [yli, yri]这样的一个矩形中. 求放的方式. 思路 明显,行列等价且可以分开考虑.题目转化为有n线段,在每个线段内取一点…
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2041 A number of students are members of a club that travels annually to exotic locations. Their destinations in the past have included Indian…
Problem D: Evil Straw Warts Live A palindrome is a string of symbols that is equal to itself when reversed. Given an input string, not necessarily a palindrome, compute the number of swaps necessary to transform the string into a palindrome. By  swap…
https://cn.vjudge.net/problem/UVA-1368 二维的hamming距离算法: For binary strings a and b the Hamming distance is equal to the number of ones (population count) in a XOR b. int hamming_distance(unsigned x, unsigned y) { ; unsigned val = x ^ y; // Count the n…
题目链接:https://cn.vjudge.net/problem/UVA-11776 题意: 给出数字n(0<=n<=1000),代表有n个农民,接下来有n行,每行两个数字S和E代表这个农民工作时间为[S,E]: 每个农民工作时,需要有一个enforcer来监督,且每个enforcer一次只能监督一个农民: 求最少需要多少个enforcer. 题解: 这道题我也不太清楚算贪心还是算模拟,可能两者都有一点吧. 首先我们根据正常思维,既然要模拟分配监工去监督农民,那么肯定先给第一个开始做的农民…
https://vjudge.net/problem/UVA-1614 题意:输入一个长度为n的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0. 思路:贪心部分的理论依据:前i个数可以凑出1-sum[i]的所有整数. 数学归纳,n=1时成立,假设n=k之前所有项都成立,当n=k+1时.sum[k+1]=sum[k]+a[k+1].        只需证明能凑出sum[k]+1~sum[k+1]间的整数即可.设1≤p≤a[k+1],sum[k]+p=sum[k]+a[…
题意:给一个数字(开头非0),拿掉其中的d个数字,使剩下的数字最大(前后顺序不能变). 析:拿掉d个数字,还剩下n-d个数字.相当于从n个数字中按先后顺序选出n-d个数字使组成的数字最大,当然采用窗口滑动优先选取大的. 也就是说,当然第一位最大,这个数就最大了,所以这是一个贪心算法.我开始并不知道有这个算法, 所以开始我是暴力的,700ms,要是数据量再大一点,就TLE了.所以我想肯定有高效率的算法,查了查,原来还有这个. 先说我想法,首先在前d个数字中选最大的,然后在从这个数字到d+1个中选最…
题意:给定 n 个区间,然后把它们变成等长的,并且不相交,问最大长度. 析:首先是二分最大长度,这个地方精度卡的太厉害了,都卡到1e-9了,平时一般的1e-8就行,二分后判断是不是满足不相交,找出最长的.这个题并不难, 就是精度可能控制不好,再就是把小数化成分数时,可能有点麻烦. 代码如下: #include <iostream> #include <cmath> #include <cstdlib> #include <set> #include <…
贪心,假如任意给出一个序列,如果两两交换了以后会变大,那么就交换,直到不能交换为止. #include<bits/stdc++.h> using namespace std; ; string s[maxn]; int rk[maxn]; bool cmp(int x,int y) { , j = , n1 = s[x].size(), n2 = s[y].size(); string *s1 = &s[x], *s2 = &s[y]; int ct = n1+n2; whil…
这道题目我用了一上午才做出来,还是看的别人的思路,尽管没有看代码做的有点慢.代码能力还是得加强啊.思维 得缜密.不能想当然,要有根据,写上的代码要有精确度.省的以后还得慢慢调试 思路:贪心.每次都查看两端位置上的字母是否相等.若不相等就在里面查找能使他们相等且所需移动位置最少的那 个.然后交换.记录交换的距离,贪心的离最后一个由近及远找与第一个位置相等的.同理贪心从第一个位置找和最 后一个位置相等且离第一个位置近期的. . .感觉这样的方法确实能够,可是并不会证明这样的策略的正确性.. . 代码…
                                       Silly Sort Your younger brother has an assignment and needs some help. His teacher gave him a sequence ofnumbers to be sorted in ascending order. During the sorting process, the places of two numbers can beinter…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 证明:前i个数一定能凑够1..sum[i]中的所有数字 i=1时显然成立. 现在假设i>=2时结论成立 即前i个数字能凑出1..sum[i] 令k=i+1; 现在证明前i+1个数字能凑出1..sum[i+1] 即用前i个数字和数字a[i+1]凑出1..sum[i+1] 现在我们把i+1个数字全都用上. 得到sum[i+1] 现在我们要再得到sum[i]+1,sum[i]+2..sum[i+1]-1 那么我们只要用sum[i+1]…
题目链接:https://vjudge.net/problem/UVA-11300 这道题的思路太神了,但很难想到是贪心. 用M表示每个人最终拥有的金币数. 首先假设有四个人.假设1号给2号3枚,2号又给1号5枚,那么实际上1号并没有给2号,而2号给了1号2枚.这样设$x_2$表示2号给了1号$x_2$枚.若$x_2<0$,那么就表示1号给了2号$-x_2$枚.这样我们就相当于在1号和2号之间连了一条边,表示1号2号之间硬币关系(注意是环形,所以$x_1$表示1号和4号之间的硬币关系). 假设1…
题目链接: 传送门 Defeat the Enemy Time Limit: 3000MS     Memory Limit: 32768 KB Description Long long ago there is a strong tribe living on the earth. They always have wars and eonquer others.One day, there is another tribe become their target. The strong t…
Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major problem.The shores of Rellau Creek in central Loowater had always been a prime breeding ground for geese.Due to the lack of predators,the geese population was out of c…
题意:鞋匠现在有n个工作要做,每个工作要x天,没延迟一天需要付款y,鞋匠每天只能做一个工作,问使得鞋匠最少赔款的工作顺序. 思路:工作和工作之间排序,如果a.value*b.day>b.value*a.day  a工作应该排在前面 #include <iostream> #include<cstdio> #include<algorithm> using namespace std; #define N 1010 struct node{ int day; int…
题意: 输入n个数,第i个数ai满足1≤ai≤i.对每个数添加符号,使和值为0. 分析: 排序后从最大的元素(假设为k)开始,凑出sum/2即可.用去掉了k的集合,一定可以凑出sum/2 - a[k].只要sum是偶数,就一定会有解. 代码: #include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std; const int maxn…
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2255 题意 n个任务,允许时间区间为[ri, di](ri , di <= 20000),运算量为wi,可以分割,问最小运算速度 思路 明显,应该二分枚举最小运算速度, 对于时刻i来说,应该优先处理已经开始的最早结束的任务.接着,如果任务已经处理完毕,那就应该等待…
https://vjudge.net/problem/UVA-11636 题意: 经过一次复制,一条语句会变成两条语句,再经过一次变成四条语句...求最少需要复制几次能使条数恰好为n? 思路: 贪心水题. 每次以最大复制数复制即可. #include<iostream> #include<algorithm> #include<string> using namespace std; + ; int n; int main() { ios::sync_with_stdi…