2018年第九届蓝桥杯C/C++A组省赛 题面&部分题解

2023-11-19

首先,原题:

链接: https://pan.baidu.com/s/1UzRN6Mf2Dwp0263F-MMESg 

密码: 2ryh

第一题

标题:分数

1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 
每项是前一项的一半,如果一共有20项,
求这个和是多少,结果用分数表示出来。
类似:
3/2
当然,这只是加了前2项而已。分子分母要求互质。

注意:
需要提交的是已经约分过的分数,中间任何位置不能含有空格。
请不要填写任何多余的文字或符号。

直接草稿纸上归纳法求算数表达式,应该是(2^20-1)/2^19=1048575/524288 没什么难度,初中生都会。

第二题 

标题:星期一

整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?
(不要告诉我你不知道今天是星期几)

注意:需要提交的只是一个整数,不要填写任何多余的内容或说明文字。

Excel很方便(我电脑上WPS全家桶。。道理一样了)

先找到这个世纪最后一个周一:

全选表格,设置单元格格式为日期型。

A1填“2000年12月25日”,A2填“=A1-7”,对A列自动填充(拖拽也可以)

5217行为最后一个周一,所以答案5217.

2019-3-18更新:

Office/WPS具有局限性,日期只能算1900年之后的,如果出题出1900之前的,可以用vbs来计算

创建txt文件,后缀名改为.vbs,保存,拖进记事本编辑:

用到计算日期的两种函数:

DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])
DateAdd(timeinterval,number,date)
允许数据类型: timeinterval 表示相隔时间的类型,代码为:
年份 yy、yyyy 季度 qq、q
月份 mm、m
每年的某一日 dy、y
日期 dd、d
星期 wk、ww
工作日 dw
小时 hh
分钟 mi、n
秒 ss、s
毫秒 ms

本题可以计算两个datediff:

msgbox datediff("d","1901-1-1","2000-12-31")
msgbox datediff("d","2000-12-31","2019-3-18")

结果分别为:36518  6651

我知道今天是周一,用6651%7 = 1,意思就是2000-12-31是周几需要我往前数一天,是周日。

周日往前数6天,是周一,用floor((36518-6)/7)+1,就是答案了。同样可得到5217。

第三题

标题:乘积尾零

如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?

5650 4542 3554 473 946 4114 3871 9073 90 4329 
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899 
1486 5722 3135 1170 4014 5510 5120 729 2880 9019 
2049 698 4582 4346 4427 646 9742 7340 1230 7683 
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649 
6701 6645 1671 5978 2704 9926 295 3125 3878 6785 
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915 
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074 
689 5510 8243 6114 337 4096 8199 7313 3685 211 

注意:需要提交的是一个整数,表示末尾零的个数。不要填写任何多余内容。

用python直接可以大数运算:

考点没有python的就认命敲代码吧,不要走歪路数什么多少个偶数多少个5,或者数几个50/25/125之类的歪路。老老实实敲代码:

#include <bits/stdc++.h>
using namespace std;
const int a[] = {5650,4542,3554,473,946,4114,3871,9073,90,4329,2758,7949,6113,5659,5245,7432,3051,4434,6704,3594,9937,1173,6866,3397,4759,7557,3070,2287,1453,9899,1486,5722,3135,1170,4014,5510,5120,729,2880,9019,2049,698,4582,4346,4427,646,9742,7340,1230,7683,5693,7015,6887,7381,4172,4341,2909,2027,7355,5649,6701,6645,1671,5978,2704,9926,295,3125,3878,6785,2066,4247,4800,1578,6652,4616,1113,6205,3264,2915,3966,5291,2904,1285,2193,1428,2265,8730,9436,7074,689,5510,8243,6114,337,4096,8199,7313,3685,211,0};
long long p = 1;
const long long mod = 1e10;
int res;
int main(){
	for(int i = 0;a[i];i++){
		p*=a[i];
		while(!(p%10)){
			res++;
			p/=10;
		}
		p%=mod;//模一个1e10保证始终不会溢出
	}
	cout << res;
	return 0;
}

同样能得出正确答案31(比赛的时候现场没想这么一招,走了歪路浪费了时间还没做对)。

第三题更正题解:

以上做法非正解,当一个数包含若干个因子2或者5而太长时会被截断导致错误。

正解为数2和5因子的个数,取较小的一个:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
static const int maxn = 100010;
static const int INF = 0x3f3f3f3f;
static const int mod = (int)1e9 + 7;
static const double eps = 1e-6;
static const double pi = acos(-1);

void redirect(){
    #ifdef LOCAL
        freopen("test.txt","r",stdin);
    #endif
}
int a,b;
int main(){
    redirect();
    int x;
    while(~scanf("%d",&x)){
        while(x%2==0)a++,x>>=1;
        while(x%5==0)b++,x /=5;
    } 
    printf("%d\n",(int)min(a,b));
    return 0;
}

多谢@Thj8003117135的斧正。

第四题:

标题:第几个幸运数

到x星球旅行的游客都被发给一个整数,作为游客编号。
x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。

我们来看前10个幸运数字是:
3 5 7 9 15 21 25 27 35 45
因而第11个幸运数字是:49

小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。

请你帮小明计算一下,59084709587505是第几个幸运数字。

需要提交的是一个整数,请不要填写任何多余内容。

想起了刘汝佳紫书上曾有一个关于“丑数”的题(P120/UVa 136 Ugly Numbers)

道理大同小异。不用枚举,时间不够。不用递归,栈会溢出。就用优先队列做这题比较合适。

#include <bits/stdc++.h>
using namespace std;
const int a[] = {3,5,7};
const long long maxn = 59084709587505;
priority_queue<long long,vector<long long>,greater<long long> >p;
set<long long>s;
int res;
int main(){
	long long n,m;
	for(int i = 0;i < 3;i++)p.push(a[i]);
	while((n = p.top())<=maxn){
		p.pop();
		res++;
		for(int i = 0;i < 3;i++){
			m = n*a[i];
			if(!s.count(m)){
				s.insert(m);
				p.push(m);
			}
		}	
	}
	cout << res;
	return 0;
}

答案:1905

第五题:

标题:打印图形

如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形)。

当n=1,2,3的时候,输出如下:
请仔细分析程序,并填写划线部分缺少的代码。

n=1时:
 o 
ooo
 o 

n=2时:
    o    
   ooo   
    o    
 o  o  o 
ooooooooo
 o  o  o 
    o    
   ooo   
    o    

n=3时:
             o             
            ooo            
             o             
          o  o  o          
         ooooooooo         
          o  o  o          
             o             
            ooo            
             o             
    o        o        o    
   ooo      ooo      ooo   
    o        o        o    
 o  o  o  o  o  o  o  o  o 
ooooooooooooooooooooooooooo
 o  o  o  o  o  o  o  o  o 
    o        o        o    
   ooo      ooo      ooo   
    o        o        o    
             o             
            ooo            
             o             
          o  o  o          
         ooooooooo         
          o  o  o          
             o             
            ooo            
             o             

源程序:


#include <stdio.h>
#include <stdlib.h>

void show(char* buf, int w){
	int i,j;
	for(i=0; i<w; i++){
		for(j=0; j<w; j++){
			printf("%c", buf[i*w+j]==0? ' ' : 'o');
		}
		printf("\n");
	}
}

void draw(char* buf, int w, int x, int y, int size){
	if(size==1){
		buf[y*w+x] = 1;
		return;
	}
	
	int n = _________________________ ; //填空
	draw(buf, w, x, y, n);
	draw(buf, w, x-n, y ,n);
	draw(buf, w, x+n, y ,n);
	draw(buf, w, x, y-n ,n);
	draw(buf, w, x, y+n ,n);
}

int main()
{
	int N = 3;
	int t = 1;
	int i;
	for(i=0; i<N; i++) t *= 3;
	
	char* buf = (char*)malloc(t*t);
	for(i=0; i<t*t; i++) buf[i] = 0;
	
	draw(buf, t, t/2, t/2, t);
	show(buf, t);
	free(buf);
	
	return 0;
}

比较水,可以看出来______填的应该是size类型的东西,从size/2开始试,试到size/3运行起来就能得出正确结果,所以答案size/3

第六题:

标题:航班时间

【问题背景】
小h前往美国参加了蓝桥杯国际赛。小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。

小h对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有12小时时差,故飞机总共需要14小时的飞行时间。

不久后小h的女朋友去中东交换。小h并不知道中东与北京的时差。但是小h得到了女朋友来回航班的起降时间。小h想知道女朋友的航班飞行时间是多少。

【问题描述】
对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。

【输入格式】
从标准输入读入数据。
一个输入包含多组数据。

输入第一行为一个正整数T,表示输入数据组数。
每组数据包含两行,第一行为去程的 起降 时间,第二行为回程的 起降 时间。
起降时间的格式如下

h1:m1:s1 h2:m2:s2
或
h1:m1:s1 h3:m3:s3 (+1)
或
h1:m1:s1 h4:m4:s4 (+2)
表示该航班在当地时间h1时m1分s1秒起飞,

第一种格式表示在当地时间 当日 h2时m2分s2秒降落
第二种格式表示在当地时间 次日 h3时m3分s3秒降落。
第三种格式表示在当地时间 第三天 h4时m4分s4秒降落。

对于此题目中的所有以 h:m:s 形式给出的时间, 保证 ( 0<=h<=23, 0<=m,s<=59 ).

【输出格式】
输出到标准输出。

对于每一组数据输出一行一个时间hh:mm:ss,表示飞行时间为hh小时mm分ss秒。
注意,当时间为一位数时,要补齐前导零。如三小时四分五秒应写为03:04:05。

【样例输入】
3
17:48:19 21:57:24
11:05:18 15:14:23
17:21:07 00:31:46 (+1)
23:02:41 16:13:20 (+1)
10:19:19 20:41:24
22:19:04 16:41:09 (+1)

【样例输出】
04:09:05
12:10:39
14:22:05

【限制与约定】
保证输入时间合法,飞行时间不超过24小时。


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms

格式化输入输出题,用getline(cin,str)的格式读入,后转为字符串处理,串长度短的是不变日期的,长的是变日期的。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
static const int maxn = 100010;
static const int INF = 0x3f3f3f3f;
static const int mod = (int)1e9 + 7;
static const double eps = 1e-6;
static const double pi = acos(-1);

void redirect(){
    #ifdef LOCAL
        freopen("test.txt","r",stdin);
    #endif
}

int main(){
    redirect();
    int n,h1,h2,m1,m2,s1,s2,d,t1,t2,t;
    scanf("%d",&n);
    getchar();
    string str;
    while(n--){
        getline(cin,str);
        d = 0;
        sscanf(str.c_str(),"%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d);
        d = max(d,0);
        t1 = 3600*24*d+(h2-h1)*3600+(m2-m1)*60+(s2-s1);
        getline(cin,str);
        d = 0;
        sscanf(str.c_str(),"%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d);
        d = max(d,0);
        t2 = 3600*24*d+(h2-h1)*3600+(m2-m1)*60+(s2-s1);
        t = (t1+t2)/2;
        printf("%02d:%02d:%02d\n",t/3600,(t-t/3600*3600)/60,t%60);
    }
    return 0;
}

第七题:

标题:三体攻击

【题目描述】
三体人将对地球发起攻击。为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体。其中,第 i 层第 j 行第 k 列的战舰(记为战舰 (i, j, k))的生命值为 d(i, j, k)。

三体人将会对地球发起 m 轮“立方体攻击”,每次攻击会对一个小立方体中的所有战舰都造成相同的伤害。具体地,第 t 轮攻击用 7 个参数 lat, rat, lbt, rbt, lct, rct, ht 描述;
所有满足 i ∈ [lat, rat],j ∈ [lbt, rbt],k ∈ [lct, rct] 的战舰 (i, j, k) 会受到 ht 的伤害。如果一个战舰累计受到的总伤害超过其防御力,那么这个战舰会爆炸。

地球指挥官希望你能告诉他,第一艘爆炸的战舰是在哪一轮攻击后爆炸的。

【输入格式】
从标准输入读入数据。

第一行包括 4 个正整数 A, B, C, m;
第二行包含 A × B × C 个整数,其中第 ((i − 1)×B + (j − 1)) × C + (k − 1)+1 个数为 d(i, j, k);
第 3 到第 m + 2 行中,第 (t − 2) 行包含 7 个正整数 lat, rat, lbt, rbt, lct, rct, ht。

【输出格式】
输出到标准输出。

输出第一个爆炸的战舰是在哪一轮攻击后爆炸的。保证一定存在这样的战舰。

【样例输入】
2 2 2 3
1 1 1 1 1 1 1 1
1 2 1 2 1 1 1
1 1 1 2 1 2 1
1 1 1 1 1 1 2

【样例输出】
2

【样例解释】
在第 2 轮攻击后,战舰 (1,1,1) 总共受到了 2 点伤害,超出其防御力导致爆炸。

【数据约定】
对于 10% 的数据,B = C = 1;
对于 20% 的数据,C = 1;
对于 40% 的数据,A × B × C, m ≤ 10, 000;
对于 70% 的数据,A, B, C ≤ 200;
对于所有数据,A × B × C ≤ 10^6, m ≤ 10^6, 0 ≤ d(i, j, k), ht ≤ 10^9。


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 2000ms

假期里学长发过讲线段树的pdf,后来见过求矩形面积并的博客。。不过还是不大会所以还是没写能AC的代码。。比赛时开三维数组过70%样例对我来说已经知足了。

附:长方体体积并

全解见:https://www.cnblogs.com/scx2015noip-as-php/p/2018_10_18.html#index_8

第八题:

标题:全球变暖

【题目描述】
你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......

其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。  

由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。  

例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......

请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。  

【输入格式】
第一行包含一个整数N。  (1 <= N <= 1000)  
以下N行N列代表一张海域照片。  

照片保证第1行、第1列、第N行、第N列的像素都是海洋。  

【输出格式】
一个整数表示答案。

【样例输入】
7 
.......
.##....
.##....
....##.
..####.
...###.
.......  

【样例输出】
1  


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms

两遍dfs:

#include <bits/stdc++.h>
using namespace std;
char island[1010][1010];
char tmp[1010][1010];
const int x[] = {0,0,-1,1,-1,1,-1,1};
const int y[] = {1,-1,0,0,1,1,-1,-1};
int n;
void dfs(int a,int b){
	island[a][b] = '.';
	for(int i = 0;i < 8;i++)
	if((a+x[i] >= 0) && (a+x[i] < n) && (b+y[i] >= 0) && (b+y[i] < n) && (island[a+x[i]][b+y[i]] == '#'))
	dfs(a+x[i],b+y[i]);
}
int main(){
	int fir = 0,sec = 0;
	cin >> n;
	for(int i = 0;i < n;i++)cin >> tmp[i];
	memcpy(island,tmp,sizeof(tmp));
	for(int i = 0;i < n;i++)
	for(int j = 0;j < n;j++)
	if(island[i][j] == '#'){
		fir++;
		dfs(i,j);
	}
	for(int i = 0;i < n;i++)
	for(int j = 0;j < n;j++)
	if(tmp[i][j] == '#'){
		for(int k = 0;k < 4;k++)
		if((i+x[k] >= 0) && (i+x[k] < n) && (j+y[k] >= 0) && (j+y[k] < n) && (tmp[i+x[k]][j+y[k]] == '.'))
		tmp[i][j] = '*';
		if(tmp[i][j] == '*')island[i][j] = '.';
		else island[i][j] = '#';
	}
	else island[i][j] = tmp[i][j];
	for(int i = 0;i < n;i++)
	for(int j = 0;j < n;j++)
	if(island[i][j] == '#'){
		sec++;
		dfs(i,j);
	}
	cout << fir-sec;
	return 0;
}

空间足够用了tmp数组,如果内存给得不够可以第一遍dfs把island改成其他字符以区分,可以剩下一个tmp的空间。

修正:两遍dfs的做法是错误的,详情见评论。

详解https://www.cnblogs.com/scx2015noip-as-php/p/2018_9_15.html

 

第九题:

标题:倍数问题

【题目描述】
众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。

【输入格式】
从标准输入读入数据。

第一行包括 2 个正整数 n, K。
第二行 n 个正整数,代表给定的 n 个数。

【输出格式】
输出到标准输出。
输出一行一个整数代表所求的和。

【样例入】
4 3
1 2 3 4

【样例输出】
9

【样例解释】
选择2、3、4。

【数据约定】
对于 30% 的数据,n <= 100。
对于 60% 的数据,n <= 1000。
对于另外 20% 的数据,K <= 10。
对于 100% 的数据,1 <= n <= 10^5, 1 <= K <= 10^3,给定的 n 个数均不超过 10^8。


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms

比赛的时候开了1e5的数组直接存数,现在想想这题应该是WA了,没仔细看数据规模被坑得不轻。

看到数据规模,n的个数1e8,而最大才1e5,这样每个数平均会有1e3个,而只挑3个数,多余的997个是没有任何用的,所以采用计数排序,开1e5数组,代表每个元素有多少个,>3的和3无差别,从大到小三层循环找最合适的数。另外,大数据输入,用scanf。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5+10;
int num[MAXN];
int main(){
	bool flag = false;
	int n,t,x,maxx = 0,res;
	scanf("%d%d",&n,&t);
	while(n--){
		scanf("%d",&x);
		maxx = max(maxx,x);
		num[x]++;
	}
	for(int i = maxx;i > 0;i--){
		num[i]--;
		if(num[i] >= 0)
		for(int j = maxx;j > 0;j--){
			num[j]--;
			if(num[j] >= 0)
			for(int k = maxx;k > 0;k--){
				if((num[i] >= 0) && (num[j] >= 0) && (num[k] > 0)){
					int sum = i+j+k;
					if(sum%t == 0){
						res = sum;
						flag = true;
						break;
					}
				}
			}
			num[j]++;
			if(flag)break;
		}
		num[i]++;
		if(flag)break;
	}
	cout << res;
	return 0;
}

修正:

能拿满分的正解是根据%k的模数在取模后相同的数里取前三大的,因为其他的数一定不会产生影响。这样最终能对答案产生影响的数只有3000个,设dp[i][j]表示选了i个数,这i个数的和模k的余数为j时 这些数的和的最大值。背包转移即可。(参考了https://www.cnblogs.com/scx2015noip-as-php/p/2018_9_15.html)

2019-3-21更新:

自写代码,不保证正确,欢迎纠错:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
static const int maxn = 100010;
static const int INF = 0x3f3f3f3f;
static const int mod = (int)1e9 + 7;
static const double eps = 1e-6;
static const double pi = acos(-1);

void redirect(){
    #ifdef LOCAL
        freopen("test.txt","r",stdin);
    #endif
}
priority_queue<int,vector<int>,greater<int> >pq[1010];
int dp[4][1010];
int main(){
    redirect();
    int n,k;
    scanf("%d %d",&n,&k);
    while(n--){
        int x;
        scanf("%d",&x);
        pq[x%k].push(x);
        while(pq[x%k].size() > 3)pq[x%k].pop();
    }
    for(int i = 0;i < k;i++){
        vector<int>v;
        while(!pq[i].empty())v.push_back(pq[i].top()),pq[i].pop();
        for(auto& x : v){
            if(dp[2][(k-i)%k])dp[3][0] = max(dp[3][0],dp[2][(k-i)%k]+x);
            for(int j = 0;j < k;j++)
            if(dp[1][j])dp[2][(x+j)%k] = max(dp[2][(x+j)%k],dp[1][j]+x);
            dp[1][i] = max(dp[1][i],x);
        }
    }
    printf("%d\n",dp[3][0]);
    return 0;
}

第十题:

标题:付账问题

【题目描述】
几个人一起出去吃饭是常有的事。但在结帐的时候,常常会出现一些争执。

现在有 n 个人出去吃饭,他们总共消费了 S 元。其中第 i 个人带了 ai 元。幸运的是,所有人带的钱的总数是足够付账的,但现在问题来了:每个人分别要出多少钱呢?

为了公平起见,我们希望在总付钱量恰好为 S 的前提下,最后每个人付的钱的标准差最小。这里我们约定,每个人支付的钱数可以是任意非负实数,即可以不是1分钱的整数倍。你需要输出最小的标准差是多少。

标准差的介绍:标准差是多个数与它们平均数差值的平方平均数,一般用于刻画这些数之间的“偏差有多大”。形式化地说,设第 i 个人付的钱为 bi 元,那么标准差为 : [参见p1.png]

【输入格式】
从标准输入读入数据。

第一行包含两个整数 n、S;
第二行包含 n 个非负整数 a1, ..., an。

【输出格式】
输出到标准输出。

输出最小的标准差,四舍五入保留 4 位小数。
保证正确答案在加上或减去 10^−9 后不会导致四舍五入的结果发生变化。

【样例1输入】
5 2333
666 666 666 666 666

【样例输出】
0.0000

【样例解释】
每个人都出 2333/5 元,标准差为 0。

再比如:
【样例输入】
10 30
2 1 4 7 4 8 3 6 4 7

【样例输出】
0.7928

【数据说明】
对于 10% 的数据,所有 ai 相等;
对于 30% 的数据,所有非 0 的 ai 相等;
对于 60% 的数据,n ≤ 1000;
对于 80% 的数据,n ≤ 10^5;
对于所有数据,n ≤ 5 × 10^5, 0 ≤ ai ≤ 10^9。


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms

思路:先求一个平均费用avg = S/n,如果有人付不起avg,他们要把他们的钱全付完,不够的需要钱多于avg的人付,但是这些付不起avg的人少付的钱会抬高>avg的人的付费平均值,或许又会有人付不起这个新的avg,所以循环这个过程,直到没有人付不起被抬高的avg。这样的话那些都能付得起新的avg的有钱人付的钱均相等,都是新的avg。这应该是最贪心的思路了。代码比较复杂,有空再写了贴出来。

总结:考场上思路不是很开拓,能做的题太想省时间了,结果偷鸡不成蚀把米,做了个稀里糊涂。大题没有在线测评,估计会有很多bug吧,反正AC是不可能AC的。。大一第一次参加蓝桥杯,以后还有机会,这次300报名费当交学费了吧。

2019-03-07更新:

最近很多朋友对题解中发现的错误进行了指正,在此我很感谢大家,如果没有大家的斧正可能这篇博客中的会误导许多人,而对我来说也不会知道自己错了。虽然去年侥幸拿了省一,不过如此fake的算法能拿省一,更坚定了大家能拿省一的信心不是吗?离3.24省赛不久了,预祝大家(也包括我自己)取得好成绩,我们五月份北京见!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2018年第九届蓝桥杯C/C++A组省赛 题面&部分题解 的相关文章

  • 【蓝桥杯 和与乘积】

    题目描述 解题思路 首先想想可以组成答案的区间有什么性质 很直观可以想到排除长度为1的和长度为2的 构成答案的区间肯定是由几个非1的数加上一堆1构成的 那么可以很容易的想到区间长度k有下面这个等式 k mul sm tot mul为区间非1
  • 第六题 整除排序

    题目描述 有一个序列 序列的第一个数是n 后面的每个数是前一个数整除2 请输出这个序列中的值为正数 的项 输入格式 输入一行包括一个整数n 输出格式 输出一行 包括多个整数 相邻的整数之间用一个空格分开 表示答案 测评用例规模和标准 对于8
  • 蓝桥杯青少组python:第十三届省赛第一场

    选择题 1 下列二进制中最大数是 A 110 B 1010 C 1100 D 1001 2 以下方法 不是对文件读操作的是 A readline B readlines C readtext D read 3 以下对turtle库中函数描述
  • 蓝桥杯:基础练习 特殊回文数(java实现)

    问题描述 123321是一个非常特殊的数 它从左边读和从右边读是一样的 输入一个正整数n 编程求所有这样的五位和六位十进制数 满足各位数字之和等于n 输入格式 输入一行 包含一个正整数n 输出格式 按从小到大的顺序输出满足条件的整数 每个整
  • 洛谷-【入门4】数组

    1 小鱼比可爱 题目描述 人比人 气死人 鱼比鱼 难死鱼 小鱼最近参加了一个 比可爱 比赛 比的是每只鱼的可爱程度 参赛的鱼被从左到右排成一排 头都朝向左边 然后每只鱼会得到一个整数数值 表示这只鱼的可爱程度 很显然整数越大 表示这只鱼越可
  • 备战2023蓝桥国赛-饼干

    题目描述 解析 这道题我想了很多种解决方法 但无一例外都失败了 实在是按照常规线性DP的思路真的想不出来 看了题解之后才知道它是分为三步解决这个问题的 第一步 缩小最优解的范围 先用贪心将最优解缩小到某个较小的范围内 再DP求出精确的最优解
  • 蓝桥杯.卡片(模拟)

    Question Result 3181 Solve 直接模拟暴力 初始化卡片数量为2021 去模拟拼数的过程 注意点的话 我是先去判断卡片还有没有 再去减一 所以输出结果也有一个减一 因为一旦说卡片没有了 就意味着当前这个数字拼不成了 C
  • Python蓝桥杯 基础练习 十六进制转八进制

    def huan n n format int n 16 o print n x int input for i in range 1 x 1 n input huan n format o 将数据格式化为八进制 int n 16 返回字符
  • 蓝桥杯最长不下降子序列,线段树python

    问题描述 给定一个长度为 N 的整数序列 A1 A2 AN 现在你有一次机会 将其 中连续的K 个数修改成任意一个相同值 请你计算如何修改可以使修改后的数 列的最长不下降子序列最长 请输出这个最长的长度 最长不下降子序列是指序列中的一个子序
  • 第十四届蓝桥杯程序设计C++B组 (详细图解+保姆级注释)

    0 写在前面 本届CB组题目难度较往年整体提升了一些 考察知识点全面 题目质量很高 推荐备赛蓝桥杯或感兴趣的同学深入研究本套题 废话不多说 直接上干货 一 冶炼金属 签到题难度 考察数论分块知识or二分 有部分同学可能知道下取整的定义 但是
  • 问题 D: 稀疏矩阵类型判断

    题目描述 输入一个稀疏矩阵 输出其类型 类型包括 上三角 对角线及其右上方的元素非0 其它元素为0 下三角 对角线及其左下方的元素非0 其它元素为0 对称 沿对角线对称的元素非0且相等 空矩阵 所有元素都为0 其它为普通矩阵 输入 输入包括
  • 蓝桥杯 成绩统计

    目录 问题描述 思路分析及代码实现 问题描述 小蓝给学生们组织了一场考试 卷面总分为 100 分 每个学生的得分都是一个 0 到 100 的整数 如果得分至少是 60 分 则称为及格 如果得分至少为 85 分 则称为优秀 请计算及格率和优秀
  • 蓝桥杯每日一题2023.9.16

    蓝桥杯2022年第十三届省赛真题 X进制减法 C语言网 dotcpp com 题目描述 进制规定了数字在数位上逢几进一 X 进制是一种很神奇的进制 因为其每一数位的进制并不固定 例如说某种 X 进制数 最低数位为二进制 第二数位为十进制 第
  • Open Camera异常分析(一)

    负责的项目中遇到一些三方和其他的场景使用camera导致问题 并且没有及时释放camera device致使手机camera应用一直无法使用的严重问题 针对这类问题进行了一系列的分析与追踪 最后算是定位到了问题且提供了一些解决方案 但整个追
  • 七段码(建图+搜索+并查集)

    思路 step1 邻接表建图 相邻为1 不相邻为0 题目就等价为在图中求连通子图的个数 step2 深度搜索每条边 并存储下来 step3 对选择的边用并查集保存下来 然后看father i i的个数 等于1 表示连通 否则表示不连通 易错
  • 【快速选择算法】O(n)时间复杂度

    快速选择的期望时间复杂度为O n 最坏时间复杂度为O n 2 当每次划分只划分为n 1个和1个时 由于划分时间复杂度为O n 最坏时间复杂度为O n 2 void quickselect vector
  • 多少个X 蓝桥杯模拟

    问题描述 给定一个字母矩阵 一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成 四条 线段的长度相同 而且四条线段上的字母和中心点的字母相同 一个 X图形可以使用三个整数 r c L 来描述 其中 r c 表示中心点位于第
  • [蓝桥杯 2014 省 A] 波动数列

    题目链接 蓝桥杯 2014 省 A 波动数列 题目描述 观察这个数列 1 3 0 2
  • 判断完全数-第11届蓝桥杯省赛Python真题精选

    导读 超平老师的Scratch蓝桥杯真题解读系列在推出之后 受到了广大老师和家长的好评 非常感谢各位的认可和厚爱 作为回馈 超平老师计划推出 Python 蓝桥杯真题解析100讲 这是解读系列的第27讲 判断完全数 本题是2020年6月20
  • 字符串处理-第11届蓝桥杯省赛Python真题精选

    导读 超平老师的Scratch蓝桥杯真题解读系列在推出之后 受到了广大老师和家长的好评 非常感谢各位的认可和厚爱 作为回馈 超平老师计划推出 Python 蓝桥杯真题解析100讲 这是解读系列的第26讲 字符串处理 本题是2020年6月20

随机推荐

  • 眼图测量

    百度百科 1 眼图测量解释 https baike baidu com item E7 9C BC E5 9B BE E6 B5 8B E9 87 8F 5938447 fr aladdin
  • YOLO算法v1-v3原理通俗理解

    YOLO算法v1 v3原理通俗理解 深度学习检测方法简述 我们所使用的目标检测 其实就是让机器在图片找到对应的目标 然后给图片上的目标套上一个框框 并贴上标签 比如如果图片上有人 就把人框起来并标注一个 person 使用深度学习进行目标检
  • Python学习第八天——模块

    模块 一 什么是模块 模块是一系列功能的集合体 1 模块分为四种类别 一个 py就是可以是一个模块 包 就是一个存放 init py文件的文件夹 使用C编写并链接到Python解释器的内置模块 已被编译为共享库或DLL的C或C 扩展 2 模
  • 量子速写(网站+小程序)

    使用方法非常简单 只需要输入标题 选择文章长短 它就能给你生成一篇AI文章 nbsp nbsp nbsp nbsp 泪奔 它是根据能在网上搜到的相关信息 进行AI组合的 所以不涉及侵权 并且写的合情合理 nbsp nbsp nbsp 加大难
  • 学姐去微软了

    这篇文章是我邀请在微软工作的学姐写的 最近正好是金九银十校招季 所以我邀请学姐写下当年她面试时的一些经验 希望对大家有帮助 自我介绍 烤冷面 女 hitCS专业本 硕 2018年之前没有PM实习经验 2018年暑期实习拿到腾讯和微软的PM岗
  • 如何查看和修改Windows远程桌面端口

    Windows远程桌面的默认端口为3389 基于安全性考虑 部分用户有修改默认端口的需要 以减少通过远程桌面恶意攻击和扫描主机的次数 因此今天带大家一起学习下 如何查看和修改Windows远程桌面的默认端口 一 查看Windows远程桌面端
  • HTML from 表单提交请求到servlet 实例

    HTML源码展示
  • ads+jlink和keil+jlink调试环境配置

    ads1 2 and jlinkv8 1 安装ads1 2和jlink驱动Setup JLinkARM V408i exe 安装ads1 2时 最后在100 时如果持续时间长 耐心等一下吧 没有等待而点了cancel 则之后就不好重装了 解
  • [交互]AJAX

    交互 AJAX 创建 XMLHttpRequest 发送请求 服务器响应 XMLHttpRequest readyState 状态值 响应数据 请求状态变更回调函数 XMLHttpRequest status 的值 常用状态码设置 AJAX
  • css如何设置背景颜色透明?css设置背景颜色透明度的两种方法介绍

    在网页布局中有时为了网页的整体美观 可能需要将网页中的某些部分设置为背景颜色透明 那么如何设置背景颜色透明呢 本篇文章就来给大家介绍一下css设置背景颜色透明的方法 在css中设置背景颜色透明的方法有两种 一种是通过rgba方式设置 另一种
  • ubuntu+anaconda3+python配置basicsr环境,真实有效

    活动地址 CSDN21天学习挑战赛 1 环境要求 BasicSR官方网站 Python gt 3 7 推荐使用 Anaconda 或 Miniconda PyTorch gt 1 3 NVIDIA GPU CUDA 2 Python3 8
  • Anaconda常用命令

    Anaconda常用命令 虚拟环境创建与切换 查看当前conda的信息 conda info 查看当前已经创建的虚拟环境 conda env list 或 conda info e 或conda info env 创建虚拟环境 conda
  • DECLARE_DYNCREATE(DECLARE_DYNAMIC)与IMPLEMENT_DYNCREATE(IMPLEMENT_DYNAMIC)

    一 问题 看源码 发现这两组宏的实现是有细微差别的 需要配合使用 二 原理 这两组宏的作用类似 但有一些细微的区别 DECLARE DYNCREATE 和 IMPLEMENT DYNCREATE DECLARE DYNCREATE 用于在类
  • Mysql You can‘t specify target table ‘表名‘ for update in FROM clause错误解决方案

    Mysql You can t specify target table 表名 for update in FROM clause错误解决方案 测试表结构及测试数据 1 更新 code 开始以 1 2 的数据 status 的值为 1 1
  • 开源软件许可证—GPL、AGPL、LGPL、Apache、ZLIB/LIBPNG、MIT

    转自 http www dushibaiyu com 2013 08 E5 BC 80 E6 BA 90 E8 BD AF E4 BB B6 E8 AE B8 E5 8F AF E8 AF 81 gpl E3 80 81agpl E3 80
  • Spring Set注入:基本类型、List、Map、Set、Array、Date类型注入

    Spring依赖注入有两种 构造器注入与Set注入 其中以Set注入为首选 下面演示几个示例 Bean类 User package com lwf bean import java util Date import java util Li
  • DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better 图像去模糊

    目录 Abstract 1 Introduction 2 Related work 2 1 Image Deblurring 2 2 Generative adversarial networks 3 DeblurGAN v2 Archit
  • Unity 手动拆分和组装模型

    第一次写博客 不足之处还望前辈指点 项目需求是需要用Unity制作船舰模型的爆炸图效果 我的思路是先把船舰上各个单元组件的位置记录下来 然后依次移动这些单元组件的位置 在复原该模型时 再把原来记录的单元组成模型位置还原出来 首先 在Hier
  • 计算机网络(五)——应用层HTTP协议

    HTTP 文章目录 HTTP 1 HTTP协议是什么 2 HTTP协议格式 2 1请求包含信息 2 2响应包含信息 2 3请求响应格式 2 4模拟发送请求打印响应结果 2 5请求响应头中的Content 2 6模拟响应服务器 3 HTTP优
  • 2018年第九届蓝桥杯C/C++A组省赛 题面&部分题解

    首先 原题 链接 https pan baidu com s 1UzRN6Mf2Dwp0263F MMESg 密码 2ryh 第一题 标题 分数 1 1 1 2 1 4 1 8 1 16 每项是前一项的一半 如果一共有20项 求这个和是多少