【22蓝桥杯训练1】
题目一:QWQ和QAQ
Description:
QWQ的朋友QAQ开了一个A工厂,但QAQ不是一个很精明的老板,A工厂只生产三种产品,需要三种原材料,第一种产品分别消耗第一种原材料a1、第二种原材料b1、第三种原材料c1,第二种产品分别是a2、b2、c2,第三种产品分别是a3、b3、c3,但原材料总量是有限制的,分别是a、b、c,第一种产品可以盈利d1元,第二种产品可以盈利d2元,第三种原材料可以盈利d3元,由于每个产品都不可以分解,所以所有产品的生产量一定是整数。QAQ不知道怎么合理安排生产让他的盈利最大,于是他求助QWQ,QWQ更不知道了,但你一定知道
Input:
先输入一个数字t(t<20),代表数组的组数 每组数据包括五行
第一行三个数字a1、b1、c1
第二行三个数字a2、b2、c2
第三行三个数字a3、b3、c3
第四行三个数字a、b、c
第五行三个数字d1、d2、d3
保证所有输入都是非负整数,并且不大于200
Output:
输出最大的总盈利
Sample input:
1
1 1 1
1 1 1
1 1 1
3 3 3
1 2 3
Sample output:
9
#include <iostream>
using namespace std;
int main()
{
int t,a1,a2,a3,b1,b2,b3,c1,c2,c3,d1,d2,d3,a,b,c,maxn,sum;
while(cin>>t)
{
while(t--)
{
cin>>a1>>b1>>c1>>a2>>b2>>c2>>a3>>b3>>c3>>a>>b>>c>>d1>>d2>>d3;
maxn=0;
for(int i=0;i<=200;i++)
{for(int j=0;j<=200;j++)
{for(int k=0;k<=200;k++)
{
if(a1*i+a2*j+a3*k<=a&&b1*i+b2*j+b3*k<=b&&c1*i+c2*j+c3*k<=c)
{
sum=i*d1+j*d2+k*d3;
maxn=max(maxn,sum);
}
}
}
}
cout<<maxn<<endl;
}
}
return 0;
}
题目二:QWQ和神奇的传送器
Description:
《无敌破坏王2》上映啦!QWQ作为Disney的忠实粉丝当然去贡献票房了。电影里的无敌破坏王和云妮洛普来到了互联网的世界,在这里,每个上网的人都是一个个虚拟的相同的小人物,当他们点击到某个网站时,虚拟的人物会乘坐一个神奇的传送器前往目的网站。 QWQ看到这个细节认为一个神奇的传送器只搭载一个人传输效率太低了,所以他觉得如果每个传送器能够搭载无数个人就好了,那么如果此时只有m个神奇的传送器,但有n个人等着被传送,不允许传送器有空载并且每个人看作是相同的,有多少种安排方式呢?
Input:
先输入一个t,代表数据的组数 每组数据只有一行有两个数字,之间用一个空格作为间隔,分表代表m、n 保证1<=m<=n<=12
Output:
对于每组数据,输出一个数字,代表安排方式的种数
Sample input:
1
1 2
Sample output:
1
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,m,n;
long long res;
cin>>t;
for(int i=0;i<t;i++)
{
res=1;
cin>>m>>n;
for(int j=n-1,k=0;k<m-1;k++,j--)
{
res*=j;
}
for(int j=m-1;j>1;j--)
{
res/=j;
}
cout<<res<<endl;
}
return 0;
}
题目三:QWQ和神秘商人
Description:
众所周知,QWQ热衷于星际探险和旅行,一天他来到了K星,在这里他遇到了一位神秘的商人,这位商人手中有n个宝物,每个宝物都有一定的价格和珍藏值。如果QWQ想从商人手中购买宝物,就只能花费宇宙中唯一的通货——永恒宝石,但是在K星上关于购买宝物有奇怪的规定: 购买者手中永恒宝石的数量必须大于或者等于想要购买宝物的价格; 每当完成一个交易,购买者手中永恒宝石的数量就会变成所购买的宝物的价格,不论购买者原来有多少个永恒宝石; 现在,QWQ手中有k个永恒宝石,如果他想换取最大的珍藏值,这个值是多少呢?
Input:
每组输入有三行 第一行 宝物数量n,初始宝石数量k
第二行 每一个宝物的价格
第三行 每个宝物的珍藏值
1 <= n <= 100000 其余输入均不大于100
Output:
输出最大的珍藏值
Sample input:
5 6
2 4 6 8 10
1 50 10 2 50
Sample output:
61
#include <iostream>
using namespace std;
int main()
{
int n,k,sum;
while(cin>>n>>k)
{
int a[2][100000]={0};
sum=0;
for(int i=0;i<2;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(int j=0;j<n;j++)
{
if(a[0][j]<=k)
sum+=a[1][j];
}
cout<<sum<<endl;
}
return 0;
}
题目四:QWQ和棋局挑战
Description:
众所周知QWQ的棋艺已经到了独孤求败的地步,某日一位来自泰坦星的勇士前来向QWQ发起挑战,不过挑战的项目却非常奇怪:这位勇士要求QWQ在一个n x n大小的棋盘上放置k个棋子,并要求放置后的棋盘上每一行和每一列最多有一个棋子,显然这个问题是如此的简单,所以这位勇士要求QWQ告诉他这样的棋局共有多少种? 你能帮助QWQ解决这个问题么?
Input:
每组输入占据一行
一行有两个数字 分别表示棋盘的大小n和要求放置的棋子k
0<n<9 , 0<k<=n
Output:
每组输入占据一行
输出这样的棋局的种类数目
Sample input:
样例一:
2 1
样例二:
2 2
Sample output:
样例一:
4
样例二:
2
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,k;
while(cin>>n>>k)
{
int z=1;
for(int i=n-k+1;i<=n;i++)
z*=i;
z=pow(z,2);
for(int i=1;i<=k;i++)
z/=i;
cout<<z<<endl;
}
return 0;
}
题目五:QWQ和翻译机
Description:
QWQ拥有一台破烂的翻译机,作为他在星际旅行时候的必备物品,某日,他来的一颗名为倒置星的星球,这个星球上的所有东西都是倒置的,就连说话也要倒过来说,比如,translate在这颗星球上就是etalsnart,QWQ想依靠这台破烂的翻译机完成语言交流,然而,这台翻译机每次翻译的结果并不一定是正确的,你能告诉QWQ每次翻译的结果是否正确么?如果争取就输出’YES‘,否则输出’NO‘。
Input:
每组输入占2行
第一行位QWQ想说的话
第二行位翻译机翻译的结果
每句话的长度不超过100个字符
Output:
每组输出占一行 YES或者NO
Sample input:
样例一:
code
edoc
样例二:
abb
aba
Sample output:
样例一:
YES
样例二:
NO
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s1,s2;
int i,j;
while(cin>>s1>>s2)
{
for(i=0,j=s1.size()-1;i<j;i++,j--)
{
swap(s1[i],s1[j]);
}
if(s2==s1)
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
题目六:QWQ和彩色石
Description:
QWQ来到了一个神奇的地方,这个地方有很多颜色不同的彩色石,每个颜色都可以用一个数字来代替,QWQ收集了一堆石子,他想知道这堆石子中颜色相同的石子个数的最大值
Input:
第1行输入一个数字n,代表这堆石子的个数 第二行输入n个数,代表n个石子的颜色 保证输入的所有数都不超过100
Output:
输出一个数字,代表颜色相同的石子个数的最大值
Sample input:
10
1 3 5 7 9 1 2 3 5 5
Sample output:
3
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,num[101]={0},t,maxn;
while(cin>>n)
{
memset(num,0,sizeof(num));
maxn=0;
for(int i=0;i<n;i++)
{
cin>>t;
num[t]++;
if(num[t]>maxn) maxn=num[t];
}
cout<<maxn<<endl;
}
return 0;
}
题目七:海贼的奖品赞助
Description:
本次ACM校赛得到了海贼科技的小部分奖品的赞助(30个水杯),尽管赞助的奖品不多,但也是要感谢赞助商的!由于水杯是加急定制的,所以生产水杯的的过程和以往不同,从而导致了水杯的高度竟然是不一样的;规定水杯高度低于20.00CM 为不合格的产品,你能计算一下这批水杯的合格率吗?
Input:
本题单组数据! 输入数据第一行为n,表示水杯的数量;接下来是这n个水杯的高度(实数);
Output:
输出这批水杯的合格率(保留2位小数);合格率=合格数量/总数
Sample input:
5
19.23 18.00 21.00 22.00 20.00
Sample output:
0.60
#include <bits/stdc++.h>
#include <iomanip>
using namespace std;
int main()
{
int n,sum=0;
double a[30]={0},soul;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]>=20.00) sum++;
}
soul=sum/double(n);
cout<<fixed<<setprecision(2)<<soul;
return 0;
}
题目八:天下无双
Description:
太极生两仪,两仪生四象,四象生八卦,八卦生万物。天地初开,万物皆欲成双成对;芸芸丛生,谁愿孤苦伶仃。知音难觅,阳春白雪绕梁何久,千古一绝,神雕侠女驰骋九洲。 天下岂无双?千古绝唱为知音。情寄雨丝丝,述相思之意;梦随风万里,寻同道之人。共聚一堂,为梦想而努力;携手共进,为程序而疯狂! 夜夜编程不漫长,只因与君共拼搏…… 给定n个数,其数值范围在1到n-1中,已知其中必有两个数是相同的,要求你找出并输出。(2<=n<=1,000,000)
Input:
多组数据输入.
每组输入第一行一个数n。第二行n个数,其数值范围为1..n-1。
Output:
每组输出一行一个数,即出现过两次的数。
Sample input:
5
2 3 1 4 2
8
7 6 1 2 3 5 4 7
Sample output:
2
7
#include <iostream>
#define M 1000000
using namespace std;
int main()
{
int t,num;
while(cin>>t)
{
int a[M]={0};
for(int i=0;i<t;i++)
{
cin>>num;
a[num]++;
}
for(int i=0;i<t;i++)
{
if(a[i]>1)
cout<<i<<endl;
}
}
return 0;
}
