第八届蓝桥杯省赛C/C++ A组第8题 包子凑数

参考了http://blog.csdn.net/y1196645376/article/details/69718192

思路:

数论+完全背包。

实现:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4
 5 const int MAXN = 100005;
 6
 7 int a[105], ok[MAXN], n;
 8
 9 int gcd(int x, int y)
10 {
11     return !y ? x : gcd(y, x % y);
12 }
13
14 int main()
15 {
16     cin >> n;
17     for (int i = 0; i < n; i++)
18     {
19         cin >> a[i];
20     }
21     int g = a[0];
22     for (int i = 1; i < n; i++)
23     {
24         g = gcd(g, a[i]);
25     }
26     if (g != 1)
27         puts("INF");
28     else
29     {
30         ok[0] = true;
31         for (int i = 0; i < n; i++)
32         {
33             for (int j = 0; j + a[i] < MAXN; j++)
34             {
35                 if (ok[j])
36                 {
37                     ok[j + a[i]] = true;
38                 }
39             }
40         }
41         int cnt = 0;
42         for (int i = 0; i < MAXN; i++)
43         {
44             if (!ok[i])
45                 cnt++;
46         }
47         printf("%d\n", cnt);
48     }
49     return 0;
50 }
时间: 2025-01-04 06:07:21

第八届蓝桥杯省赛C/C++ A组第8题 包子凑数的相关文章

2016蓝桥杯省赛C/C++A组第八题 四平方和

题意: 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7 = 1^2 + 1^2 + 1^2 + 2^2 (^符号表示乘方的意思) 对于一个给定的正整数,可能存在多种平方和的表示法. 要求你对4个数排序: 0 <= a <= b <= c <= d 并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法 程序

2016蓝桥杯省赛C/C++A组第六题 寒假作业

题意:现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ 每个方块代表1~13中的某一个数字,但不能重复. 比如: 6 + 7 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5 以及: 7 + 6 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5 就算两种解法.(加法,乘法交换律后算不同的方案) 你一共找到了多少种方案? 分析:回溯即可,但是如果等到cur==12

[JAVA][2013蓝桥杯模拟赛 JAVA本科B组][第四题:二阶魔方]

[题目取自CSDN-671coder] 第四题:二阶魔方 题目描述: 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方(如图1所示) 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下: x轴正向:绿 x轴反向:蓝 y轴正向:红 y轴反向:橙 z轴正向:白 z轴反向:黄 假设我们规定,只能对该魔方进行3种操作.分别标记为: x 表示在x轴正向做顺时针旋转 y 表示在y轴正向做顺时针旋转 z 表示在z轴正向做顺时针旋转 基本旋转后的效果如图2,3,4所示. xyz 则表示顺序执行x,

第八届蓝桥杯省赛题解

一直以来,自己的科技类竞赛实在太少了,确实是自己的问题,从大学没有对自己有一个明确的规划,现在再回过头去恶补很多的知识点.悔当初,甚至怀疑自己,却已经来不及,最近因为某些人某些事让自己心情变得十分差,把自己弄得狼狈不堪. 今年是第一次参加蓝桥杯比赛,原本寒假就打算好好复习的,一直没有静下心来准备,正式做题是在比赛前3天.校区是在绵阳师范墨家小区,还以为头一天就要赶过去,后面接到学院老师的电话说一起跟着大部队过去,于是就在早上6点起来,看了会算法,吃早餐后就随着校车去了. 这次去参赛的都是比较厉害

第八届蓝桥杯省赛 分巧克力

问题描述 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这N块巧克力中切出K块巧克力分给小朋友们.切出的巧克力需要满足: 1. 形状是正方形,边长是整数 2. 大小相同 例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力. 当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?输入格式 第一行包含两个整数N和K.(1 <= N, K

第八届蓝桥杯国赛 发现环

问题描述 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路.环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG. 为了恢复正常传输.小明需要找到所有在环路上的电脑,你能帮助他吗? 输入格式 第一行包含一个整数N. 以下N行每行两个整数a和b,表示a和b之间有一条数据链接相

2016蓝桥杯省赛C/C++A组第二题 跳蚱蜢

题意:有9只盘子,排成1个圆圈.  其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8 每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空盘中.  请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列,  并且保持空盘的位置不变(也就是1-8换位,2-7换位,...),至少要经过多少次跳跃?  注意:要求提交的是一个整数,请不要填写任何多余内容或说明文字. 分析:结果是20. #include<bits/stdc++.h> using nam

2016蓝桥杯省赛C/C++A组第九题 密码脱落

题意: X星球的考古学家发现了一批古代留下来的密码. 这些密码是由A.B.C.D 四种植物的种子串成的序列. 仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串). 由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征. 你的任务是: 给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子. 输入一行,表示现在看到的密码串(长度不大于1000) 要求输出一个正整数,表示至少脱落了多少个种子. 例如,输入: ABCBA 则程序应该输出:

第七届蓝桥杯省赛C/C++B组赛题及答案

第一题 [题目] 煤球数目 有一堆煤球,堆成三角棱锥形.具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. [提示] 找出每一层煤球个数的规律,循环累加计算 [答案] 1 #include<stdio.h> 2 int main() 3 { 4 int i,s=1,num=1; 5 for(i=2;i&