ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试
ACM软件大赛之编程大赛题目(附部分答案)
![ACM软件大赛之编程大赛题目(附部分答案)](https://img.taocdn.com/s3/m/5f40e10453d380eb6294dd88d0d233d4b14e3f10.png)
ACM 软件大赛之编程大赛比赛注意事项:l 比赛时间为3小时(小时(180180分钟);比赛分两个阶段:第一阶段限时30分钟,完成公示的3题,第二阶段限时150分钟(事先完成第一阶段题目的小组可提前进入第二阶段); l 比赛第一阶段的3道题目将在前期宣传中告知参赛选手,比赛第二阶段的题目将由赛事主席当场公布竞赛题目;主席当场公布竞赛题目;l 前两阶段题目分为三个分值(前两阶段题目分为三个分值(55分、分、1010分、分、1515分),第一阶段3道公示题都为5分;第二阶段总共15道题,根据不同的难度分值不同,分别为5道5分题,分题,55道10分题,分题,55道15分题;第一阶段参赛队员不可参考任何相关资料;第二阶段参赛队员可以携带诸如书,如书,手册,程序清单等参考资料。
手册,程序清单等参考资料。
手册,程序清单等参考资料。
比赛过程中队员不得携带任何电子媒质的资料;参比赛过程中队员不得携带任何电子媒质的资料;参赛者可以选择自己擅长的语言(赛者可以选择自己擅长的语言(C,C++,JAVA C,C++,JAVA 等等)进行编写等等)进行编写l 考虑到大一和大二学生的知识掌握程度,大一参加选手一开始就会有10分的分数,最后总分是由所做题目及初始的10分相加得到。
分相加得到。
l 每组队员根据安排使用电脑,小组人数为两人的使用一台电脑,超过两人的使用两台电脑,每台的电脑配置完全相同;脑,每台的电脑配置完全相同;l 各小组每做完一题或几题,必须交予评委老师运行,评委老师当场给分;各小组每做完一题或几题,必须交予评委老师运行,评委老师当场给分; l 如在比赛中发现作弊等行为,将取消比赛资格。
如在比赛中发现作弊等行为,将取消比赛资格。
第一阶段公示题目:题目一:(5分) 打印以下图形,纵遵从字母顺序,行字符数遵从斐波那契数列ABCCDDD EEEEEFFFFFFFFGGGGGGGGGGGGG#include<iostream>int f(int x){int a = 1 , b = 0;int max_ = x;int sum = 0; for(int i = 0; i < max_ ; i++){sum = a + b;a = b;b = sum;}return sum;}void loop_print(int num,char chr){for(int i = 0; i < num ;i++)std::cout<<chr;std::cout<<"\n";}int main(){int line_max = 7;char chr = 'A';for(int line = 0; line < line_max; line++){loop_print(f(line+1),chr);chr++;}return 0;}题目二:(5分)有个电子钟,12点显示为12:00(即12小时制),那么请问一天24时间内,出现连续3个相同数字的钟点有几个?#include<iostream>using namespace std;bool check(int me){int h= me/100;int m= me-100*h;return h<=12&&m<=59&&h>0?true:false;//12小时制小时制}int main(){int me=0;int j(0);//总计数器总计数器while( me<1270){//max 12:59int t= me;int n[4];for(int i=0;i<4;i++){n[i]=t%10;t /= 10;}if(n[1]==n[2]&&(n[0]==n[1]||n[3]==n[1])&&check( me)){//cout<<n[3]<<n[2]<<":"<<n[1]<<n[0]<<"\n";//testj++;me++;}cout<<"total: "<<j*2<<endl;}题目三:(5分)10进制的四位数中有几个符合如下特征:将其分别表示为16进制、10进制、12进制,在每种状态下,分别将各个位上的数相加,能得到3个相等10进制数。
ACM测试
![ACM测试](https://img.taocdn.com/s3/m/680aebdeb9f3f90f76c61b10.png)
P1 指数取模Time Limit: 2000ms Memory Limit:32768KBProblem description由于a^n(a的n次方)的数值非常大,有时候仅想知道最后几位是多少。
现请你编写程序输出(a^n)%k的结果。
Input输入中有多个测试用例,每个测试用例占一行。
分别为三个整数a,n ,k。
其中1<=a,n<=1e9,1<=k<=10000。
Output输出每个测试用例的(a^n)%k的结果。
Sample Input3 3 52 32 52 30 5Sample Output214P2 图形检测Time Limit: 1000ms, Memory Limit:32768KBProblem description判断圆与矩形是否有重叠部分,相切情形无重叠。
Input输入有多个测试用例,每个用例占二行,第一行是用空隔隔开的三个数x,y,r,其中x,y为圆的圆心,r为半径(r>0.0),第二行是空隔隔开的四个数x1,y1,x2,y2,表示一个矩形的一条对角线上的两个顶点的坐标。
矩形的四边均与坐标轴平行或者垂直。
以上数据精度保存到小数点后两位。
Output当有重合的时候输出“Yes”,否则输出“No”。
Sample Input1 1 10 0 2 21 1 12 23 3Sample OutputYesNoP3 恶魔岛Time Limit: 30000ms Memory Limit:32768KBThe Problemgoldfisher为了解救被绑架的未婚妻而来到了恶魔岛。
上岛前,一个神秘的印度人yingnan 告诉他恶魔岛处处布满陷阱,只有沿着地上标记数字和为最大的路径才能找到公主。
为此他给goldfisher画了一个草图,假使地上标记的数字如下:12 31 5 99 1 1 1其中的最大路径是1-3-9-1,最大的和是14,只有沿着这条路径走,才能找到公主。
ACM题目及答案
![ACM题目及答案](https://img.taocdn.com/s3/m/20deaa2b647d27284b735152.png)
Qwertyuiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmqwertyuiopasdfgh jklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzxc vbnmqwertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmqwertyuiopa sdfghjklzxcvbnmqwertyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwertyuio zxcvbnmqwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmrtyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwertyuio pasdfghjklzxcvbnmqwertyuiopasdfghj Sincisco ACM 答案 2010/11/10 Sincisco 小组成员排球队员站位问题i【题目】排球队员站位问题┏━━━━━━━━┓图为排球场的平面图,其中一、二、三、四、五、六为位置编号,┃┃二、三、四号位置为前排,一、六、五号位为后排。
某队比赛时,┃┃一、四号位放主攻手,二、五号位放二传手,三、六号位放副攻┠──┬──┬──┨手。
队员所穿球衣分别为1,2,3,4,5,6号,但每个队┃ 四│ 三│ 二┃员的球衣都与他们的站位号不同。
acm竞赛试题及答案
![acm竞赛试题及答案](https://img.taocdn.com/s3/m/7efe556eec630b1c59eef8c75fbfc77da2699708.png)
acm竞赛试题及答案ACM(Association for Computing Machinery)竞赛是一项全球性计算机科学竞赛,旨在锻炼参赛者的问题解决能力和编程技巧。
每年都有数千名来自不同学校的学生参加这一挑战。
本文将提供一些最近的ACM竞赛试题以及相应的答案,帮助读者了解和学习竞赛题目的类型和解题思路。
1. 问题描述给定一个由N个整数组成的数组A,请编写一个程序,找出数组中两个不同元素的差的最小值。
2. 输入格式- 第一行包含一个整数N,表示数组A的长度。
- 第二行包含N个以空格分隔的整数,表示数组A中的元素。
3. 输出格式输出一个整数,表示数组中两个不同元素的差的最小值。
4. 示例输入:51 52 9 12输出:15. 解题思路该问题可以通过对数组进行排序,并比较相邻两个数的差值来求解。
首先,将数组A进行升序排序。
然后,遍历排序后的数组,依次计算相邻两个数的差值,并记录其中的最小值。
最后,返回这个最小差值即可。
6. 代码实现```pythondef min_difference(nums):nums.sort() # 对数组进行升序排序min_diff = float('inf') # 初始化最小差值为正无穷大for i in range(len(nums)-1):diff = abs(nums[i] - nums[i+1]) # 计算相邻两个数的差值min_diff = min(min_diff, diff) # 更新最小差值return min_diff# 输入处理N = int(input())A = list(map(int, input().split()))# 调用函数并输出结果result = min_difference(A)print(result)```7. 答案解析对给定的数组进行排序后,遍历数组计算相邻两个数的差值,并记录其中的最小值。
上述代码中,首先将数组A进行升序排序,然后使用一个变量`min_diff`来记录最小差值。
(完整版)杭电acm部分答案
![(完整版)杭电acm部分答案](https://img.taocdn.com/s3/m/64d4bd7c4afe04a1b171de2c.png)
Problem DescriptionCalculate A + B.InputEach line will contain two integers A and B. Process to end of file.OutputFor each case, output A + B in one line.Sample Input1 1Sample Output2#include<stdio.h>void main(){int a,b;while(scanf("%d %d",&a,&b)!=EOF){printf("%d\n",a+b);}}Problem DescriptionHey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n.InputThe input will consist of a series of integers n, one integer per line.OutputFor each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in the range of 32-bit signed integer.Sample Input1100Sample Output15050#include<stdio.h>void main(){int n,sum,i;while(scanf("%d",&n)!=EOF){sum=0;for( i=0;i<=n;i++)sum+=i;printf("%d\n\n",sum);}}Problem DescriptionI have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.InputThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.OutputFor each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.Sample Input21 2112233445566778899 998877665544332211Sample OutputCase 1:1 +2 = 3Case 2:112233445566778899 + 998877665544332211 = 1111111111111111110 #include<stdio.h>#include<string.h>int main(){char str1[1001], str2[1001];int t, i, len_str1, len_str2, len_max, num = 1, k;scanf("%d", &t);getchar();while(t--){int a[1001] = {0}, b[1001] = {0}, c[1001] = {0};scanf("%s", str1);len_str1 = strlen(str1);for(i = 0; i <= len_str1 - 1; ++i)a[i] = str1[len_str1 - 1 - i] - '0';scanf("%s",str2);len_str2 = strlen(str2);for(i = 0; i <= len_str2 - 1; ++i)b[i] = str2[len_str2 - 1 - i] - '0';if(len_str1 > len_str2)len_max = len_str1;elselen_max = len_str2;k = 0;for(i = 0; i <= len_max - 1; ++i){c[i] = (a[i] + b[i] + k) % 10;k = (a[i] + b[i] + k) / 10;}if(k != 0)c[len_max] = 1;printf("Case %d:\n", num);num++;printf("%s + %s = ", str1, str2);if(c[len_max] == 1)printf("1");for(i = len_max - 1; i >= 0; --i){printf("%d", c[i]);}printf("\n");if(t >= 1)printf("\n");}return 0;}Problem DescriptionGiven a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.InputThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).OutputFor each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.Sample Input25 6 -1 5 4 -77 0 6 -1 1 -6 7 -5Sample OutputCase 1:14 1 4Case 2:7 1 6注:最大子序列是要找出由数组成的一维数组中和最大的连续子序列。
acm试题及答案python
![acm试题及答案python](https://img.taocdn.com/s3/m/9786a6e5fc0a79563c1ec5da50e2524de518d0f2.png)
acm试题及答案pythonACM试题及答案(Python)1. 问题描述:给定一个整数数组,请编写一个Python函数,找出数组中第二大的数。
2. 输入格式:一个包含整数的列表。
3. 输出格式:一个整数,表示数组中第二大的数。
4. 示例:- 输入:[10, 5, 8, 20, 15]- 输出:155. 答案:```pythondef find_second_max(nums):first_max = float('-inf')second_max = float('-inf')for num in nums:if num > first_max:second_max = first_maxfirst_max = numelif num > second_max and num != first_max:second_max = numreturn second_max if second_max != float('-inf') else None# 示例测试nums = [10, 5, 8, 20, 15]print(find_second_max(nums)) # 输出应为15```6. 分析:此题要求找出数组中第二大的数。
我们可以通过遍历数组,使用两个变量分别记录当前找到的最大值和第二大值。
在遍历过程中,如果当前元素比第一大的元素大,则更新第二大的元素为当前第一大的元素,并将当前元素设为第一大的元素。
如果当前元素小于第一大的元素但大于第二大的元素,则更新第二大的元素。
最后返回第二大的元素。
7. 注意:如果数组中只有一个元素或所有元素都相等,则返回`None`。
acm编程比赛题
![acm编程比赛题](https://img.taocdn.com/s3/m/1c462256be23482fb4da4cae.png)
比赛试题主办方:迅翔计算机协会【问题描述】这是一个古老而又经典的问题。
用给定的几种钱币凑成某个钱数,一般而言有多种方式。
例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。
显然,最少需要2个钱币才能凑成15元。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。
【要求】【数据输入】输入可以有多个测试用例。
每个测试用例的第一行是待凑的钱数值M(1 <= M <= 2000,整数),接着的一行中,第一个整数K(1 <= K <= 10)表示币种个数,随后是K 个互不相同的钱币面值Ki(1 <= Ki <= 1000)。
输入M=0时结束。
【数据输出】每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。
如果凑钱失败,输出“Impossible”。
你可以假设,每种待凑钱币的数量是无限多的。
【样例输入】156 2 5 10 20 50 10011 2【样例输出】2Impossible【问题描述】Felicia 的生日是11月1日(和Kitty是同一天生的哦)。
于是Feli请来Kitty一起过生日。
Kitty带来了最新款的“Kitty猫”玩具准备送给Feli,不过她说,这份礼物可不是白送的。
Feli要帮她一个忙,才能够得到心仪已久的玩具。
Kitty说,“Kitty猫”玩具已经卖出了n!个,n<=10^100 *_*,Kitty想知道确切的数字,而不是无聊的“一个数加个感叹号”。
Feli 听了大吃一惊。
要知道,算出n!是一个无比艰巨的任务。
Feli告诉Kitty,就算Feli算出n!,Kitty也看不下去,因为当n=20 时,计算机的长整型已经存不下了(Kitty只能接受1-9之间的数字)。
于是Kitty说,你只要告诉我n!最后一位非0的数就可以了。
acm数学竞赛试题及答案
![acm数学竞赛试题及答案](https://img.taocdn.com/s3/m/ffcc7c8d6e1aff00bed5b9f3f90f76c660374c65.png)
acm数学竞赛试题及答案# 题目一:数列问题问题描述:给定一个数列 \( a_1, a_2, a_3, \ldots, a_n \),数列中每个元素都是正整数,且满足 \( a_i = a_{i-1} + a_{i-2} \) 对于所有\( i \geq 3 \)。
如果 \( a_1 = 1 \) 且 \( a_2 = 1 \),请找出数列的第 \( n \) 项。
解答:根据题意,这是一个斐波那契数列。
第 \( n \) 项的值可以通过递归关系计算得出。
对于 \( n \) 的值,可以使用以下递归公式:\[ a_n = a_{n-1} + a_{n-2} \]其中,\( a_1 = 1 \) 和 \( a_2 = 1 \)。
因此,数列的前几项为 1, 1, 2, 3, 5, 8, 13, 21, ...。
对于任意的 \( n \),可以通过递归或动态规划方法计算出 \( a_n \)。
# 题目二:组合问题问题描述:从 \( n \) 个不同的元素中选择 \( k \) 个元素的所有可能组合的个数是多少?解答:这个问题可以通过组合数学中的二项式系数来解决。
从 \( n \) 个不同元素中选择 \( k \) 个元素的组合数 \( C(n, k) \) 可以用以下公式计算:\[ C(n, k) = \frac{n!}{k!(n-k)!} \]其中,\( n! \) 表示 \( n \) 的阶乘。
# 题目三:几何问题问题描述:在一个直角坐标系中,给定三个点 \( A(x_1, y_1) \),\( B(x_2, y_2) \) 和 \( C(x_3, y_3) \)。
如果 \( \overrightarrow{AB} \) 和 \( \overrightarrow{AC} \) 是垂直的,求证 \( A \) 是直角三角形 \( ABC \) 的直角顶点。
解答:如果 \( \overrightarrow{AB} \) 和 \( \overrightarrow{AC} \) 垂直,那么它们的数量积(点积)应该为零。
ACM必做50题的解题-模拟
![ACM必做50题的解题-模拟](https://img.taocdn.com/s3/m/7aff457c02768e9950e73804.png)
}
return 1;
}
int main(){
int i,j,n;
char c;
scanf("%d",&n);
while(n--){
for(i=1; i<=3; i++)
scanf("%s %s %s",left[i],right[i],result[i]);
for(c='A'; c<='L'; c++){
1)选择合适的算法
对于每一枚硬币x逐个试探:
x比真币轻的猜测是否成立?猜测成立则进行输出。
x比真币重的猜测是否成立?猜测成立则进行输出。
2)选择合适的数据结构
以字符串数组存储称量的结果。每次称量时,天平左右最多有6枚硬币。因此,字
符串的长度需要为7,最后一位存储字符串的结束符’\0’,便于程序代码中使用字符串
{
int t,n;
cin>>t;
while(t--){
cin>>n;
int x,y;
int cross[SIZE];
memset(cross,0,sizeof(cross));
for(int i=0;i<n;++i){
cin>>x>>y;
int start,end;
if(x>y){
swapnum(x,y);
case 'u': if( strchr(left[i], x) == NULL) return 0;
break;
case 'e': if(strchr(right[i], x) != NULL || strchr(left[i], x) != NULL) return 0;
河南acm试题及答案
![河南acm试题及答案](https://img.taocdn.com/s3/m/7230857cabea998fcc22bcd126fff705cd175c1b.png)
河南acm试题及答案河南ACM试题及答案1. 问题描述编写一个程序,计算给定整数序列中,满足条件的子序列数量。
条件为:子序列中任意两个相邻元素的差的绝对值不超过1。
2. 输入格式第一行包含一个整数N,表示序列的长度,1 <= N <= 100000。
第二行包含N个整数,表示序列中的元素,-1000000 <= 数字 <= 1000000。
3. 输出格式输出满足条件的子序列数量。
4. 样例输入```51 2 3 2 1```5. 样例输出```5```6. 问题分析本题需要对给定的整数序列进行遍历,使用动态规划的方法来计算满足条件的子序列数量。
设dp[i]表示以第i个元素结尾的满足条件的子序列数量,那么dp[i]的值可以通过dp[i-1](当前元素与前一个元素相等或相邻)和dp[i-2](当前元素与前两个元素相邻)计算得出。
7. 算法实现```pythondef countSubsequences(nums):dp = [0] * (len(nums) + 1)dp[0] = 1for i in range(1, len(nums) + 1):for j in range(i):if abs(nums[i-1] - nums[j-1]) <= 1:dp[i] += dp[j]return sum(dp)```8. 测试用例对于样例输入,程序应输出5,表示有5个满足条件的子序列。
9. 注意事项- 确保输入数据的格式正确。
- 考虑边界条件,如序列长度为1时的情况。
- 动态规划数组的大小应根据序列长度动态调整。
(完整word版)杭电ACM试题答案
![(完整word版)杭电ACM试题答案](https://img.taocdn.com/s3/m/d762793276c66137ee0619cb.png)
【杭电ACM1000】A +B ProblemProblem DescriptionCalculate A + B.InputEach line will contain two integers A and B. Process to end of file.OutputFor each case, output A + B in one line.Sample Input1 1Sample Output2# include <stdio.h>int main(){int a, b;while(scanf("%d%d", &a, &b)!=EOF)printf("%d\n", a+b);return 0;}【杭电ACM1001】Sum ProblemProblem DescriptionHey, welcome to HDOJ(Hangzhou Dianzi University Online Judge). In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n.InputThe input will consist of a series of integers n, one integer per line.OutputFor each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in the range of 32-bit signed integer.Sample Input1 100Sample Output1 5050# include <stdio.h>int main(){int n, i, sum = 0;while(scanf("%d", &n)!=EOF){for(i=1; i<=n; ++i)sum = sum + i;printf("%d\n\n", sum);sum = 0;}return 0;}【杭电ACM1002】A +B Problem IIProblem DescriptionI have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.InputThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.OutputFor each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.Sample Input2 1 2 112233445566778899 998877665544332211Sample OutputCase 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110#include<stdio.h>#include<string.h>int shu(char a){return (a-'0');}int main(){char a[1000],b[1000];int num[1001];int n,i,j=1,al,bl,k,t;scanf("%d",&n);while(n--){getchar();if(j!=1)printf("\n");scanf("%s",a);al=strlen(a);scanf("%s",b);bl=strlen(b);k=(al>bl)?al:bl;for(i=0;i<=k;i++)num[i]=0;t=k;for(k;al>0&&bl>0;k--){num[k]+=shu(a[--al])+shu(b[--bl]);if(num[k]/10){num[k-1]++;num[k]%=10;}}while(al>0){num[k--]+=shu(a[--al]);if(num[k+1]/10){num[k]++;num[k+1]%=10;}}while(bl>0){num[k--]+=shu(b[--bl]);if(num[k+1]/10){num[k]++;num[k+1]%=10;}}printf("Case %d:\n",j++);printf("%s + %s = ",a,b);for(i=0;i<=t;i++){if(i==0&&num[i]==0)i++;printf("%d",num[i]);}printf("\n");}return 0;}。
ACM程序设计竞赛例题[1]
![ACM程序设计竞赛例题[1]](https://img.taocdn.com/s3/m/4595c6dd7cd184254a353550.png)
备战ACM资料习题1.0-1背包问题在0 / 1背包问题中,需对容量为c 的背包进行装载。
从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。
对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。
程序如下:#include <stdio.h>void readdata();void search(int);void checkmax();void printresult();int c=35, n=10; //c:背包容量;n:物品数int w[10], v[10]; //w[i]、v[i]:第i件物品的重量和价值int a[10], max; //a数组存放当前解各物品选取情况;max:记录最大价值//a[i]=0表示不选第i件物品,a[i]=1表示选第i件物品int main(){readdata(); //读入数据search(0); //递归搜索printresult();}void search(int m){if(m>=n)checkmax(); //检查当前解是否是可行解,若是则把它的价值与max比较{a[m]=0; //不选第m件物品search(m+1); //递归搜索下一件物品a[m]=1; //不选第m件物品search(m+1); //递归搜索下一件物品}}void checkmax(){int i, weight=0, value=0;for(i=0;i<n;i++){if(a[i]==1) //如果选取了该物品{weight = weight + w[i]; //累加重量value = value + v[i]; //累加价值}}if(weight<=c) //若为可行解if(value>max) //且价值大于max max=value; //替换max}void readdata(){for(i=0;i<n;i++)scanf("%d%d",&w[i],&v[i]); //读入第i件物品重量和价值}void printresult(){printf("%d",max);}2.装载问题有两艘船,载重量分别是c1、c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2。
ACM程序设计竞赛例题[1]
![ACM程序设计竞赛例题[1]](https://img.taocdn.com/s3/m/8e8360ed84868762cbaed565.png)
A C M程序设计竞赛例题[1]-CAL-FENGHAI.-(YICAI)-Company One1备战ACM资料习题1.0-1背包问题在0 / 1背包问题中,需对容量为c 的背包进行装载。
从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。
对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。
程序如下:#include <>void readdata();void search(int);void checkmax();void printresult();int c=35, n=10; ");printf("\n");}printf("\n");}6.素数环问题把从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。
分析:用回溯算法,考察所有可能的排列。
程序如下:#include <>#include <>void search(int);void init(); 表示空格;’X’表示墙。
程序如下:#include <>#include <>void search(int,int);int canplace(int,int);void readdata(); Floodfill给一个20×20的迷宫和一个起点坐标,用广度优先搜索填充所有的可到达的格子。
提示:参考第2题。
2. 电子老鼠闯迷宫如下图12×12方格图,找出一条自入口(2,9)到出口(11,8)的最短路本题给出完整的程序和一组测试数据。
状态:老鼠所在的行、列。
程序如下:#include<>void readdata();a[i][j]=0; ....注:测试数据可在运行时粘贴上去(点击窗口最左上角按钮,在菜单中选则“编辑”/“粘贴”即可)。
acm模拟试题及答案
![acm模拟试题及答案](https://img.taocdn.com/s3/m/876444bb6e1aff00bed5b9f3f90f76c661374c87.png)
acm模拟试题及答案ACM模拟试题及答案1. 问题描述:给定一个整数数组,请找出数组中第二大的数。
2. 输入格式:第一行包含一个整数N,表示数组的元素个数。
第二行包含N个整数,表示数组的元素。
3. 输出格式:输出数组中第二大的数。
4. 样例输入:53 14 1 55. 样例输出:46. 问题分析:要解决这个问题,我们首先需要对数组进行排序,然后找到第二大的数。
但是,为了提高效率,我们可以使用一次遍历的方法来找到最大的两个数。
7. 算法步骤:- 初始化两个变量,分别用来存储最大值和第二大的值。
- 遍历数组中的每个元素:- 如果当前元素大于最大值,则更新第二大的值等于当前最大值,然后更新最大值为当前元素。
- 如果当前元素小于最大值但大于第二大的值,则更新第二大的值为当前元素。
- 遍历结束后,第二大的值变量即为所求。
8. 代码实现:```pythonn = int(input())nums = list(map(int, input().split()))max_val = float('-inf')second_max_val = float('-inf')for num in nums:if num > max_val:second_max_val = max_valmax_val = numelif num > second_max_val and num != max_val:second_max_val = numprint(second_max_val)```9. 答案分析:- 在样例输入中,数组为[3, 1, 4, 1, 5],最大值为5,第二大的值为4。
- 算法正确地找到了第二大的数,并且避免了使用额外的空间。
10. 注意事项:- 确保数组中至少有两个不同的元素,否则无法找到第二大的数。
- 考虑数组中存在相同元素的情况,算法需要正确处理。
11. 扩展问题:- 如果数组中有多个相同的第二大的数,如何找到它们? - 如果需要找到数组中的第三大的数,算法应该如何修改?12. 附加说明:- 本题考查了数组的处理和排序算法的应用。
acm编程例题 参考答案
![acm编程例题 参考答案](https://img.taocdn.com/s3/m/682156f81b37f111f18583d049649b6648d709df.png)
acm编程例题参考答案ACM编程例题参考答案ACM(Advanced Computer Mathematics)是一种面向计算机科学与技术的竞赛形式,旨在提高参与者的编程技能和解决问题的能力。
ACM编程例题是指在ACM竞赛中出现的一系列编程题目,这些题目涵盖了各种算法和数据结构的应用。
本文将给出一些ACM编程例题的参考答案,希望能够帮助读者更好地理解和掌握这些题目的解法。
一、题目一:最大公约数题目描述:给定两个正整数a和b,求它们的最大公约数。
解题思路:最大公约数可以通过欧几里得算法来求解。
该算法的基本思想是,两个正整数的最大公约数等于其中较小的数和两数之差的最大公约数。
具体的实现可以使用递归或循环的方式。
代码示例:```c++int gcd(int a, int b) {if (b == 0) {return a;}return gcd(b, a % b);}```二、题目二:素数判断题目描述:给定一个正整数n,判断它是否为素数。
解题思路:素数是只能被1和自身整除的正整数。
判断一个数是否为素数可以使用试除法,即从2开始,依次判断n是否能被2到sqrt(n)之间的数整除。
如果存在能整除n的数,则n不是素数;否则,n是素数。
代码示例:```c++bool isPrime(int n) {if (n <= 1) {return false;}for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return false;}}return true;}```三、题目三:字符串反转题目描述:给定一个字符串s,将其反转后输出。
解题思路:字符串反转可以通过将字符串的首尾字符依次交换来实现。
可以使用双指针的方式,一个指针指向字符串的首字符,另一个指针指向字符串的尾字符,然后交换两个指针所指向的字符,并向中间移动,直到两个指针相遇。
代码示例:```c++void reverseString(string& s) {int left = 0;int right = s.length() - 1;while (left < right) {swap(s[left], s[right]);left++;right--;}}```四、题目四:二分查找题目描述:给定一个有序数组和一个目标值,使用二分查找算法在数组中找到目标值的索引,如果目标值不存在,则返回-1。
ACM(五篇范例)
![ACM(五篇范例)](https://img.taocdn.com/s3/m/cb1c3cf4ac51f01dc281e53a580216fc700a53f6.png)
ACM(五篇范例)第一篇:ACMDijkstra 模板/*************************************** * About:有向图的Dijkstra算法实现 * Author:Tanky Woo * Blog:t=0;if(flag == 0){printf(“Non”);}else{for(int i=min;i<=max;++i){if(mark[i]==1 && arr[i]==0)cnt++;}}if(cnt==1)printf(“Yesn”);elseprintf(“Non”);}} return 0;搜索算法模板BFS:1.#include2.#include3.#include4.#includeing namespace std;6.const int maxn=100;7.bool vst[maxn][maxn];// 访问标记8.int dir[4][2]={0,1,0,-1,1,0,-1,0};// 方向向量9.10.struct State // BFS 队列中的状态数据结构 11.{ 12.int x,y;// 坐标位置13.int Step_Counter;// 搜索步数统计器14.};15.16.State a[maxn];17.18.boolCheckState(State s)// 约束条件检验19.{ 20.if(!vst[s.x][s.y] &&...)// 满足条件 1: 21.return 1;22.else // 约束条件冲突 23.return 0;24.} 25.26.void bfs(State st)27.{ 28.queue q;// BFS 队列29.State now,next;// 定义 2 个状态,当前和下一个30.st.Step_Counter=0;// 计数器清零 31.q.push(st);// 入队32.vst[st.x][st.y]=1;// 访问标记33.while(!q.empty())34.{ 35.now=q.front();// 取队首元素进行扩展36.if(now==G)// 出现目标态,此时为Step_Counter 的最小值,可以退出即可37.{ 38.......// 做相关处理39.return;40.} 41.for(int i=0;i<4;i++)42.{ 43.next.x=now.x+dir[i][0];// 按照规则生成下一个状态44.next.y=now.y+dir[i][1];45.next.Step_Counter=now.Step_Coun ter+1;// 计数器加1 46.if(CheckState(next))// 如果状态满足约束条件则入队 47.{ 48.q.push(next);49.vst[next.x][next.y]=1;//访问标记 50.} 51.} 52.q.pop();// 队首元素出队53.} 54.return;55.} 56.57.int main()58.{ 59.......60.return 0;61.}代码:胜利大逃亡Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.Input 输入数据的第一行是一个正整数K,表明测试数据的数量.每组测试数据的第一行是四个正整数A,B,C和T(1<=A,B,C<=50,1<=T<=1000),它们分别代表城堡的大小和魔王回来的时间.然后是A块输入数据(先是第0块,然后是第1块,第2块......),每块输入数据有B行,每行有C个正整数,代表迷宫的布局,其中0代表路,1代表墙.(如果对输入描述不清楚,可以参考Sample Input中的迷宫描述,它表示的就是上图中的迷宫) 特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.Output 对于每组测试数据,如果Ignatius能够在魔王回来前离开城堡,那么请输出他最少需要多少分钟,否则输出-1.Sample Input 1 3 3 4 20 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0Sample Output 11代码:#include #include #include #include #includeusing namespace std;int tx[] = {0,1,-1,0,0,0,0};int ty[] = {0,0,0,1,-1,0,0};int tz[] = {0,0,0,0,0,1,-1};int arr[55][55][55];int known[55][55][55];// 访问标记int a,b,c,d;struct state{int x,y,z;// 所在的坐标int step_count;//统计搜索步数。
蓝桥杯ACM决赛经典试题及其详解
![蓝桥杯ACM决赛经典试题及其详解](https://img.taocdn.com/s3/m/6ec53bd40c22590102029dd8.png)
/*入门训练A+B问题问题描述输入A、B,输出A+B。
说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。
输入格式输入的第一行包括两个整数,由空格分隔,分别表示A、B。
说明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式。
做题时你应该假设所给的输入是一定满足输入格式的要求的,所以你不需要对输入的格式进行检查。
多余的格式检查可能会适得其反,使用你的程序错误。
在测试的时候,系统会自动将输入数据输入到你的程序中,你不能给任何提示。
比如,你在输入的时候提示“请输入A、B”之类的话是不需要的,这些多余的输出会使得你的程序被判定为错误。
输出格式输出一行,包括一个整数,表示A+B的值。
说明:“输出格式”是要求你的程序在输出结果的时候必须满足的格式。
在输出时,你的程序必须满足这个格式的要求,不能少任何内容,也不能多任何内容。
如果你的内容和输出格式要求的不一样,你的程序会被判断为错误,包括你输出了提示信息、中间调试信息、计时或者统计的信息等。
样例输入12 45说明:“样例输入”给出了一组满足“输入格式”要求的输入的例子。
这里给出的输入只是可能用来测试你的程序的一个输入,在测试的时候,还会有更多的输入用来测试你的程序。
样例输出57说明:“样例输出”给出了一组满足“输出格式”要求的输出的例子。
样例输出中的结果是和样例输入中的是对应的,因此,你可以使用样例的输入输出简单的检查你的程序。
要特别指出的是,能够通过样例输入输出的程序并不一定是正确的程序,在测试的时候,会用很多组数据进行测试,而不局限于样例数据。
有可能一个程序通过了样例数据,但测试的时候仍只能得0分,可能因为这个程序只在一些类似样例的特例中正确,而不具有通用性,再测试更多数据时会出现错误。
比如,对于本题,如果你写一个程序不管输入是什么都输入57,则样例数据是对的,但是测试其他数据,哪怕输入是1和2,这个程序也输出57,则对于其他数据这个程序都不正确。
acm试题及答案
![acm试题及答案](https://img.taocdn.com/s3/m/3052485d02d8ce2f0066f5335a8102d277a2616b.png)
acm试题及答案ACM试题及答案试题 1: 给定一个整数数组,请找出数组中第二大的数。
答案:1. 对数组进行排序。
2. 数组排序后,倒数第二个元素即为第二大的数。
试题 2: 编写一个函数,计算给定字符串中字符出现的次数。
答案:```pythondef count_characters(s):count_dict = {}for char in s:if char in count_dict:count_dict[char] += 1else:count_dict[char] = 1return count_dict```试题 3: 判断一个数是否为素数。
答案:1. 如果数小于2,则不是素数。
2. 从2开始到该数的平方根,检查是否有因数。
3. 如果没有因数,则该数是素数。
试题 4: 实现一个算法,将一个整数数组按照奇数在前,偶数在后的顺序重新排列。
答案:```pythondef rearrange_array(arr):odd = []even = []for num in arr:if num % 2 == 0:even.append(num)else:odd.append(num)return odd + even```试题 5: 给定一个链表,删除链表的倒数第n个节点。
答案:1. 遍历链表,找到链表的长度。
2. 再次遍历链表,找到倒数第n个节点的前一个节点。
3. 将前一个节点的next指针指向当前节点的下一个节点。
4. 如果当前节点是头节点,则更新头节点。
试题 6: 编写一个函数,实现字符串反转。
答案:```pythondef reverse_string(s):return s[::-1]```试题 7: 给定一个整数数组,找出数组中没有出现的最小正整数。
答案:1. 遍历数组,使用哈希表记录出现的数字。
2. 从1开始,检查每个数字是否在哈希表中。
3. 第一个不在哈希表中的数字即为答案。
试题 8: 实现一个算法,计算斐波那契数列的第n项。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试第一题:梦境是虚幻吗?时间限制:3000ms 内存限制:65535KB 难度:★★描述《盗梦空间》是一部精彩的影片,在这部电影里,Cobb等人可以进入梦境之中,梦境里的时间会比现实中的时间过得快得多,这里假设现实中的3分钟,在梦里就是1小时。
然而,Cobb他们利用强效镇静剂,可以从第一层梦境进入第二层梦境,甚至进入三层,四层梦境,每层梦境都会产生同样的时间加速效果。
那么现在给你Cobb在各层梦境中经历的时间,你能算出现实世界过了多长时间吗?比如,Cobb先在第一层梦境待了1个小时,又在第二层梦境里待了1天,之后,返回第一层梦境之后立刻返回了现实。
那么在现实世界里,其实过了396秒(6.6分钟)输入第一行输入一个整数T(0<=T<=100),表示测试数据的组数。
每组测试数据的第一行是一个数字M(3<=M<=100)随后的M行每行的开头是一个字符串,该字符串如果是"IN" 则Cobb向更深层的梦境出发了,如果是字符串"OUT"则表示Cobb从深层的梦回到了上一层。
如果是首字符串是"STAY"则表示Cobb在该层梦境中停留了一段时间,本行随后将是一个整数S表示在该层停留了S分钟(1<=S<=10000000)。
数据保证在现实世界中,时间过了整数秒。
输出对于每组测试数据,输出现实世界过的时间(以秒为单位)。
样例输入16INSTAY 60INSTAY 1440OUTOUT样例输出396测试输入106INSTAY 60INSTAY 1440OUTOUT6INININOUTOUTOUT7INININSTAY 0 OUTOUTOUT2INSTAY 203INSTAY 0 OUT3INSTAY 10 OUT4INSTAY 10 STAY 10 OUT5INSTAY 20 STAY 20 OUT STAY 120 10INSTAY 20 STAY 20 INSTAY 1440STAY 1440OUTSTAY 120OUTSTAY 11STAY 50测试输出39660306073209723000参考代码:#include<stdio.h>int main(){int n;char a[5];scanf("%d",&n);while(n--){int m,i,b=1,c,time=0;scanf("%d",&m);for(i=0;i<m;i++){scanf("%s",&a);if(a[0]=='I') b*=20;else if(a[0]=='S') {scanf("%d",&c);time+=c*60/b;} else if(a[0]=='O') b/=20;}printf("%d\n",time);}return 0;}第二题:独木舟过河时间限制:3000ms 内存限制:65535KB 难度:★★描述进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。
一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。
我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。
现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。
根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。
输入第一行输入s,表示测试数据的组数;每组数据的第一行包括两个整数w,n,80<=w<=200,1<=n<=300,w为一条独木舟的最大承载量,n为人数;接下来的一组数据为每个人的重量(不能大于船的承载量);输出每组人数所需要的最少独木舟的条数。
样例输入385 65 84 85 80 84 8390 390 45 60100 550 50 90 40 60样例输出533测试输入:2085 65 84 85 80 84 8390 390 45 60100 550 50 90 40 60150 1050 50 90 40 60 5 84 85 80 84112 2050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111150 3050 88 90 78 78 79 84 85 80 84 50 99 86 40 60 5 84 85 80 111 90 96 60 42 2688 98 89 96 99199 5098 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 10050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111100 199100 245 56100 445 55 46 54199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 2560 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111199 20050 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 5034 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 4060 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 4650 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 584 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 5050 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111测试输出:533514222550100122100100100100100100100100参考代码#include <iostream>#include <cstdlib>using namespace std;int compInc(const void *a,const void *b){return *(int *)a - *(int *)b;}int main(){int s;int w,n;cin>> s;int i;int a[300];int j;int sum;int x,y;for(i=0;i<s;i++){sum = 0;cin>> w >> n;for(j=0;j<n;j++){cin>> a[j];}qsort(a,n,sizeof(int),compInc);for(x = 0,y = n-1;x < y; ){if(a[x] + a[y] <= w){x++;y--;}else{y--;}sum++;}if(x == y){sum++;}cout<< sum <<endl;}return 0;}第三题 521521ACM时间限制:1000ms 内存限制:65535KB 难度:★★★描述Acm队的小菜对数学的研究不是很透彻,但是固执的他还是想一头扎进去。