一班欢乐赛题目备选题目
2024-07-30 10:45:09
发布于:北京
第一题
题目
买水
题干
米乐是一个商人,家里非常有钱。他最近想进购一批茅台酒。
米乐走遍了周围好几十公里的酒厂,获得了每个厂家每一瓶酒的单价,和最多能够提供的数量。
现在请你帮米乐求出够买这批酒,最少需要多少钱。
现在给出N个厂家的每瓶酒单价和最多能够供给酒的数量,和米乐需要的数量
输入格式
第一行两个整数 N , K 分别代表有N个厂家和米乐需要酒的数量(瓶)。
第二行至第N-1行每行有两个整数 Ni , Di 分别代表每个厂家的每瓶酒的单价,和最多能提供酒的数量。
输出格式
一行,代表米乐最少需要的钱数。(保留两位小数)
输出输入样例
输入
5 10
3 5
2 3
2 5
6 2
8 3
输出
22.00
提示说明
1≤N,K≤10的9次方
1≤Ni,Di≤10000
目前测试点是样例中的内容。
标程
#include<bits/stdc++.h>
using namespace std;
struct jiu{
int money,many;
} a[1000000];
int n,z;
double cnt;
bool cmp(jiu x,jiu y){
return x.money<y.money;
}
int main(){
cin>>n>>z;
for(int i=1;i<=n;i++){
cin>>a[i].money>>a[i].many;
}
sort(a+1,a+n+1,cmp);
// for(int i=1;i<=n;i++){
// cout<<a[i].money<<" "<<a[i].many<<endl;
// }
for(int i=1;i<=n;i++){
if(a[i].many<=z){
z=z-a[i].many;
cnt=cnt+a[i].money*a[i].many;
}else{
cnt=cnt+a[i].money*z;
break;
}
// cout<<z<<endl;
// //cout<<cnt<<" ";
}
printf("%.2lf",cnt);
return 0;
}
链接:
买水
第二题
题目
哥德巴赫猜想
题干
什么是哥德巴赫猜想呢?
哥德巴赫猜想一共分为两种:
1.强哥德巴赫猜想: 任何一个大于2的偶数都可写成两个质数之和。
2.弱哥德巴赫猜想:任何一个大于7的奇数都能被表示成三个奇质数的和。(一个质数可以被多次使用)
这道题研究的是强哥德巴赫猜想。
现在有一个整数 N 如果是偶数,请输出N的两个质数 a , b(输出 a 最小的那一组),如果不是偶数或N≤2请输出“error”
输入格式
一个整数 N 。(数据保证数据正确)
输出格式
现在有一个整数 N 如果是偶数,请输出N的两个质数 a , b (输出 a 最小的那一组),如果不是整数请输出“error”
输出输入样例
样例一
输入
12
输出
5 7
样例二
输入
11
输出
error
提示说明
1≤N≤2900000
测试点:
- 输入: 12 || 输出: 5 7
- 输入: 2900000 || 输出: 3 2899997
- 输入: 2899999 || 输出: error
- 输入: 13 || 输出: error
- 输入: 100 || 输出: 3 97
标程
#include<bits/stdc++.h>
using namespace std;
bool isprime(long long num){
if(num==2) return true;
if(num%2==0 || num<2) return false;
else{
for(int i=3;i*i<=num;i+=2){
if(num%i==0) return false;
}
return true;
}
}
int main(){
long long x;
cin>>x;
if(x%2==1||x<=2) {
cout<<"error";
return 0;
}
for(int i=2;i<=x;i++){
for(int j=2;j<=x-i;j++){
if(isprime(i)==true&&isprime(j)&&i+j==x){
cout<<i<<" "<<j;
return 0;
}
}
}
return 0;
}
链接:
强哥德巴赫猜想
第三题
题目
迷宫
题干
在遥远的编程星球,编程人们发现了一个非常大的洞穴,经过探查,这里面是一个迷宫。为了探查,探查队邀请了米乐(是一个大名鼎鼎的探险家),现在请你帮助米乐完成走出迷宫的地图。
' . '代表通道
' # '代表墙
提示(用广搜方法)。
输入格式
第一行两个整数 N , M 分别代表迷宫的长宽。
第二行至第 N-1 行,每行 M 个字符。
第三行四个整数 X , Y , X1 , Y1 分别代表起点的(x,y)和终点(x,y)。
输出格式
输出 N 行 M 列的矩阵,整个迷宫客每个通道离起点的距离
第 N+1 行输出起点到终点的最少步数,如果不能到达输出-1。
输出输入样例
输入
3 3
.##
.#.
...
1 1 3 3
输出
0 -1 -1
1 -1 5
2 3 4
4
提示说明
1≤ X , Y ≤ N , M ≤10的9次方
测试点:
- 输入:
3 3
.##
.#.
...
1 1 3 3
输出:
0 -1 -1
1 -1 5
2 3 4
4
- 输入:
3 4
####
####
####
1 1 3 3
输出:
0 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
-1
标程
#include<iostream>
#include<queue>
using namespace std;
const int N=1e3+10;
struct node{
int x,y;
int step;
vector<int> lu;
};
char a[1010][1010];
queue<node> q;
int n,m,x1,y1;
int x=1,y=1;
int vis[1010][1010];
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
void bfs(){
q.push(node{x,y,1});
vis[x][y]=1;
while(!q.empty()){
node tmp=q.front();
q.pop();
for(int i=0;i<4;i++){
int tx=tmp.x+dx[i];
int ty=tmp.y+dy[i];
if(tx<1||tx>n||ty<1||ty>m) continue;
if(vis[tx][ty]>0) continue;
if(a[tx][ty]=='#') continue;
vis[tx][ty]=tmp.step+1;
q.push(node{tx,ty,tmp.step+1});
}
}
}
int ma=-1;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
cin>>x>>y>>x1>>y1;
bfs();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<vis[i][j]-1<<" ";
}
cout<<endl;
}
cout<<vis[x1][y1]-1;
return 0;
}
链接:
迷宫
这里空空如也
有帮助,赞一个