摘要:
题意:有n个人围城一个圈,其中第i个人想要ri个不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物,如果两个相邻的人拥有同一种礼物,则双方都会很不高兴。问:医用需要多少种礼物才能满足所有人的需要?假设每种礼物有无穷多个,不相邻的两个人不会一起聊天。分析:《训练指南》上的分析我没看懂,但是我觉得书上讲的麻烦了。当输入完每个人的ri后,统计相邻两个人的ri之和的最大值Max,如果这个Max比应当提供给所有人礼物数的均值的两倍还要少,那么ans=均值的两倍,否则ans=Max,代码写起来也很短:View Code 1 #include <stdio.h> 2 #include <io 阅读全文
摘要:
题意:有f+1个人来分N个圆形派,每个人能得到的必须是一整块派,而不是几块拼在一起,且面积要相同,求每个人最多能得到多大面积的派分析:对于每个人分到的派的大小,其上界是面积最大的派,下界可以取得0,在两者之间用二分的方法做就可以了,二分的判定是,给定一个面积x,每个派能分成[pi*r*r/x]份,看这个结果是否大于f+1代码 1 #include <stdio.h> 2 #include <iostream> 3 #include <math.h> 4 #include <algorithm> 5 #define zz 6 using names 阅读全文
摘要:
题意:你有b元钱,想要组装一台电脑,给出n个配件的各自的种类、品质因子和价格,要求每种类型的派件各买一个,总价格不超过b,且“品质最差配件”的品质因子应该尽量大 (题目保证有解),输出配件最小品质因子的最大值分析:既然题目保证有解,那么每种配件都选品质最差的是一个极端,每种都选品质最好有是一个极端,在两个极端之间二分就可以得到答案。 1 #pragma warning(disable:4786) 2 #include <stdio.h> 3 #include <iostream> 4 #include <string> 5 #include <vect 阅读全文
摘要:
题目:给定两个只含大写字母的等长字符串,问两者之间是否存在一一映射分析:考察一一映射的概念,将两个字符串分别作字母统计,再按字母出现个递增的顺序排序(排列的是每个字母出现的个数),如果排序后结果一样那么两者是一一映射 1 #include <stdio.h> 2 #include <iostream> 3 #include <string> 4 #include <algorithm> 5 #define zz 6 using namespace std; 7 int main(){ 8 #ifndef zz 9 freopen("in 阅读全文
摘要:
题意就不说了,简单的二分就可以了,应当是算法初学者的一个Hello world程序吧!只是建议用乘法去做,不要用除法去求解~注意输入的终止符是负数 1 #include <stdio.h> 2 #include <iostream> 3 using namespace std; 4 int main(){ 5 int n, cas = 1; 6 while(scanf("%d", &n)!=EOF && n>0){ 7 int i = 1, cnt = 0; 8 while(true){ 9 if(i>=n) br 阅读全文
摘要:
题意:给出n个数,请按照他们绝对值的递增顺序排序,且相邻元素不能有相同符号(必须一个大于0,一个小于0),问这样操作后最多有多少个元素分析:先调用sort排序然后逐个判断相邻两个元素的乘积是否小于0. 注意结果会溢出,不能用int,可以用double,当然用bool型变量标记也可以 1 #include <stdio.h> 2 #include <iostream> 3 #include <vector> 4 #include <algorithm> 5 #include <math.h> 6 #define zz 7 using n 阅读全文
摘要:
题意:给你一个m行n列的举行巧克力切成mn个1*1的方块,问需要切多少刀?每一刀只能沿着直线切,不能用一刀同时切割两块巧克力。分析:简单计算后发现ans=m*n-1 1 #include <stdio.h> 2 #include <iostream> 3 #define zz 4 using namespace std; 5 int main(){ 6 #ifndef zz 7 freopen("in.txt", "r", stdin); 8 #endif 9 int a, b;10 while(scanf("%d%d& 阅读全文
摘要:
题意:有一块草坪,长为l,宽为w,再起中心线的不同位置处装有n个点状的喷水装置。每个喷水装置i可以将以它为中心,半径为ri的圆形区域润湿,请选择尽量少的喷水装置,把整个草坪全部润湿。分析:对于直径小于宽度的喷水装置其实可以忽略,剩下的问题转换成了最小区间覆盖问题,即:用最少数量的区间去覆盖给定的区间 1 #include <stdio.h> 2 #include <iostream> 3 #include <algorithm> 4 #include <math.h> 5 #define zz 6 using namespace std; 7 c 阅读全文
摘要:
题意:输入两个字符串s和t,判断是否可以从t种删除0个或多个字符(其他字符不变),得到字符串s,比如abcde可以得到bce,单数无法得到dc分析:简单模拟即可 1 #include <stdio.h> 2 #include <iostream> 3 #include <string> 4 #define zz 5 using namespace std; 6 int main(){ 7 #ifndef zz 8 freopen("in.txt", "r", stdin); 9 #endif10 string s, t 阅读全文
摘要:
题意给定n个正整数,你的任务是把他们连接成一个最大的整数,比如,123,124,56,90有24种连接方法,最大的结果是9056124123分析:自己写比较函数cmp(s, t), 比较s+t 与t+s的大小即可。#include <stdio.h>#include <iostream>#include <string>#include <vector>#include <algorithm>#define zzusing namespace std;bool cmp(const string &s, const string 阅读全文