提交 40c57a83 编写于 作者: ToTensor's avatar ToTensor

add 3 exercises

上级 06f1e99e
......@@ -11,33 +11,62 @@
</code></pre><p>样例输出</p><pre class="has" style="margin-left:0; margin-right:0">
<code class="language-content">2 200</code></pre><p>提示</p><p style="margin-left:0; margin-right:0">【样例解释】</p><p style="margin-left:-0.5pt; margin-right:0">乐乐咨询了 3 个商家&#xff0c;打算购买一二三等奖奖品数量分别是 1 个、2 个、3 个&#xff0c;编号为 1 的商家一二三等奖奖品报价分别是 70、50、30 元&#xff0c;编号为 2 的商家报价分别是 60、40、20 元&#xff0c;编号为 3 的商家报价分别是 80、55、20 元&#xff0c;乐乐在编号为 2 的商家购买总费用最低&#xff0c;为200 元。</p><p style="margin-left:0; margin-right:0">【数据范围】</p><p style="margin-left:23.75pt; margin-right:0">40%数据&#xff1a;1≤n≤5000 </p><p style="margin-left:23.75pt; margin-right:0">100%数据&#xff1a;1≤n≤100000&#xff0c;1≤x,y,z≤1000&#xff0c;奖品报价都是 1000 范围以内的正整数。</p>
以下程序实现了这一功能,请你填补空白处的内容:
```cpp
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n, x, y, z, i, min = 1000000, n1, n2, n3, temp, t = 0;
cin >> n >> x >> y >> z;
for (i = 0; i < n; i++)
{
temp = 0;
cin >> n1 >> n2 >> n3;
temp += n1 * x + n2 * y + n3 * z;
__________________
}
cout << t << " " << min;
return 0;
}
```
## template
```cpp
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int n,x,y,z,i,min=1000000,n1,n2,n3,temp,t=0;
cin>>n>>x>>y>>z;
for(i=0;i<n;i++){
temp=0;
cin>>n1>>n2>>n3;
temp+=n1*x+n2*y+n3*z;
if(temp<min){
min=temp;
t=i+1;
}
}
cout<<t<<" "<<min;
return 0;
int main()
{
int n, x, y, z, i, min = 1000000, n1, n2, n3, temp, t = 0;
cin >> n >> x >> y >> z;
for (i = 0; i < n; i++)
{
temp = 0;
cin >> n1 >> n2 >> n3;
temp += n1 * x + n2 * y + n3 * z;
if (temp < min)
{
min = temp;
t = i + 1;
}
}
cout << t << " " << min;
return 0;
}
```
## 答案
```cpp
if (temp < min)
{
min = temp;
t = i + 1;
}
```
## 选项
......@@ -45,17 +74,29 @@ int main(){
### A
```cpp
if (temp > min)
{
min = temp;
t = i + 1;
}
```
### B
```cpp
if (temp < min)
{
min = temp;
t = i - 1;
}
```
### C
```cpp
if (temp > min)
{
min = temp;
t = i - 1;
}
```
\ No newline at end of file
......@@ -15,42 +15,84 @@
</pre>
<p>要求从第s个数开始&#xff0c;数m个出列&#xff0c;第s个不出列</p>
以下程序实现了这一功能,请你填补空白处的内容:
```cpp
#include <iostream>
void JosePhus(int n, int m, int start)
{
int i, *arr = new int[n];
int count = 1;
;
for (i = 0; i < n; i++)
arr[i] = i + 1;
int sum = n;
while (count < n)
{
start--;
int index = (start + m - 1) % sum;
______________
sum--;
count++;
}
std::cout << arr[0] << "\n";
}
int main(int argc, const char *argv[])
{
int n, m, start;
std::cout << "请输入n,m,start:\n";
while (std::cin >> n >> m >> start)
{
JosePhus(n, m, start);
std::cout << "请输入n,m,start:\n";
}
return 0;
}
```
## template
```cpp
#include <iostream>
void JosePhus(int n, int m, int start) {
    int i, *arr = new int[n];
    int count = 1;;
    for(i = 0;i < n; i++)
        arr[i] = i + 1;
    int sum = n;
    while(count < n) {
        start--;
        int index = (start+m-1) % sum;
        for(i = index; i < sum-1; i++)
            arr[i] = arr[i+1];
        start = index + 1;
        sum--;
        count++;
    }
    std::cout<< arr[0] <<"\n";
void JosePhus(int n, int m, int start)
{
int i, *arr = new int[n];
int count = 1;
;
for (i = 0; i < n; i++)
arr[i] = i + 1;
int sum = n;
while (count < n)
{
start--;
int index = (start + m - 1) % sum;
for (i = index; i < sum - 1; i++)
arr[i] = arr[i + 1];
start = index + 1;
sum--;
count++;
}
std::cout << arr[0] << "\n";
}
int main(int argc, const char * argv[]) {
    int n, m, start;
    std::cout << "请输入n,m,start:\n";
    while(std::cin >> n >> m >> start) {
        JosePhus(n, m, start);
        std::cout << "请输入n,m,start:\n";
    }
    return 0;
int main(int argc, const char *argv[])
{
int n, m, start;
std::cout << "请输入n,m,start:\n";
while (std::cin >> n >> m >> start)
{
JosePhus(n, m, start);
std::cout << "请输入n,m,start:\n";
}
return 0;
}
```
## 答案
```cpp
for (i = index; i < sum - 1; i++)
arr[i] = arr[i + 1];
start = index + 1;
```
## 选项
......@@ -58,17 +100,23 @@ int main(int argc, const char * argv[]) {
### A
```cpp
for (i = index; i < sum - 1; i++)
arr[i] = arr[i + 1];
start = index - 1;
```
### B
```cpp
for (i = index; i < sum; i++)
arr[i] = arr[i - 1];
start = index + 1;
```
### C
```cpp
for (i = index; i < sum; i++)
arr[i] = arr[i - 1];
start = index - 1;
```
\ No newline at end of file
# 海港(port)
海港(port)
【问题描述】
**问题描述**
小谢是海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小谢对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船只到达的时间ti(单位:秒),船上的乘客数量Ki,以及每名乘客的国籍x(i,1),x(i,2),···,x(i,k)。
小谢统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化的讲,你需要计算n条信息。对于输出的第i条信息,你需要统计满足:ti-86400<tp<=ti的船只p,在所有的x(p,j)中,总共有多少个不同的数。
输入格式:第1行输入一个正整数n,表示小谢统计了n艘船的信息。
**输入格式**
第1行输入一个正整数n,表示小谢统计了n艘船的信息。
接下来的n行,每行描述一艘船的信息:前两个整数ti和ki分别表示这艘船到达海港的时间和船上的乘客数量,接下来的ki个整数x(i,j)表示从小谢第一次上班开始计时,这艘船在第ti秒到达海港。
保证1<=n<=105,ki>=1,∑ki<=3×105,1<=x(i,j)<=105,1<=ti-1<ti<=109。其中∑ki表示所有ki的和。输出格式
输出n行,第i行输出一个整数表示第i艘船到达后的统计信息。
【输入样例1】
**输入样例1**
```json
3
1 4 4 1 2 2
2 2 2 3
10 1 3
【输出样例1】
```
**输出样例1**
```json
3
4
4
```
样例1说明:第一艘船在第一秒到达海港,最近24小时到达的船是第一艘船,共4个乘客,分别来自国家4,1,2,2,共来自3个不同的国家。
第2艘船在第2秒到达海港,最近24小时到达的船是第1艘船和第2艘船,共有4+2=6个乘客,分别来自国家4,1,2,2,2,3,共来自4个不同的国家;
第三艘船在第10秒到达海港,最近24小时到达的船是第1艘船、第2艘船和第3艘船,共有4+2+1=7个乘客,分别是来自国家4,1,2,2,2,3,3,共来自4个不同的国家。
【输入样例2】
**输入样例2**
```json
4
1 4 1 2 2 3
3 2 2 3
86401 2 3 4
86402 1 5
【输出样例2】
```
**输出样例2**
```json
3
3
3
4
```
样例2说明:第一艘船在第一秒到达海港,最近24小时到达的船是第1艘,共有4个乘客,分别是来自国家1,2,2,3,共来自3个不同的国家。
第2艘船是第3秒到达海港,最近24小时到达的船是第一艘船和第2艘船,共有4+2=6个乘客,分别来自1,2,2,3,2,3,共来自3个不同的国家
第3艘船是第86401秒到达海港,最近24小时到达的船是第2艘船和第3艘船,共有2+2=4个乘客,分别来自2.3,3,4,共来自3个不同的国家
第4艘船是第86402秒到达海港,最近24小时到达的船是第2艘船、第3艘船和第4艘船,共有2+2+1=5个乘客,分别来自2,3,3,4,5,共来自4个不同的国家
以下程序实现了这一功能,请你填补空白处的内容:
```cpp
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
int a[100100];
int people[500100];
struct node
{
int country;
int time;
};
queue<node> q;
int main()
{
int n, sum = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int t, p;
scanf("%d%d", &t, &p);
node temp;
temp.time = t;
for (int i = 1; i <= p; i++)
{
int cty;
scanf("%d", &cty);
temp.country = cty;
q.push(temp);
if (!people[cty])
sum++;
people[cty]++;
}
while (1)
{
node old;
old = q.front();
if (temp.time - 86400 >= old.time)
{
int tc = old.country;
_________________________
q.pop();
}
else
break;
}
cout << sum << endl;
}
return 0;
}
```
## template
```cpp
......@@ -50,49 +140,59 @@
using namespace std;
int a[100100];
int people[500100];
struct node{
int country;
int time;
struct node
{
int country;
int time;
};
queue<node>q;
int main(){
int n,sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int t,p;
scanf("%d%d",&t,&p);
node temp;
temp.time=t;
for(int i=1;i<=p;i++){
int cty;
scanf("%d",&cty);
temp.country=cty;
q.push(temp);
if(!people[cty]) sum++;
people[cty]++;
}
while(1){
node old;
old=q.front();
if(temp.time-86400>=old.time)
{
int tc=old.country;
people[tc]--;
if(!people[tc]) sum--;
q.pop();
}
else break;
}
cout<<sum<<endl;
}
return 0;
queue<node> q;
int main()
{
int n, sum = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int t, p;
scanf("%d%d", &t, &p);
node temp;
temp.time = t;
for (int i = 1; i <= p; i++)
{
int cty;
scanf("%d", &cty);
temp.country = cty;
q.push(temp);
if (!people[cty])
sum++;
people[cty]++;
}
while (1)
{
node old;
old = q.front();
if (temp.time - 86400 >= old.time)
{
int tc = old.country;
people[tc]--;
if (!people[tc])
sum--;
q.pop();
}
else
break;
}
cout << sum << endl;
}
return 0;
}
```
## 答案
```cpp
people[tc]--;
if (!people[tc])
sum--;
```
## 选项
......@@ -100,17 +200,23 @@ int main(){
### A
```cpp
people[tc]++;
if (!people[tc])
sum--;
```
### B
```cpp
people[tc]--;
if (!people[tc])
sum++;
```
### C
```cpp
people[tc]--;
if (people[tc])
sum--;
```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册