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

add 3 exercises

上级 06f1e99e
...@@ -11,33 +11,62 @@ ...@@ -11,33 +11,62 @@
</code></pre><p>样例输出</p><pre class="has" style="margin-left:0; margin-right:0"> </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> <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 ## template
```cpp ```cpp
#include <iostream> #include <iostream>
#include <stdio.h> #include <stdio.h>
using namespace std; using namespace std;
int main(){ int main()
int n,x,y,z,i,min=1000000,n1,n2,n3,temp,t=0; {
cin>>n>>x>>y>>z; int n, x, y, z, i, min = 1000000, n1, n2, n3, temp, t = 0;
for(i=0;i<n;i++){ cin >> n >> x >> y >> z;
temp=0; for (i = 0; i < n; i++)
cin>>n1>>n2>>n3; {
temp+=n1*x+n2*y+n3*z; temp = 0;
if(temp<min){ cin >> n1 >> n2 >> n3;
min=temp; temp += n1 * x + n2 * y + n3 * z;
t=i+1; if (temp < min)
} {
} min = temp;
cout<<t<<" "<<min; t = i + 1;
return 0; }
}
cout << t << " " << min;
return 0;
} }
``` ```
## 答案 ## 答案
```cpp ```cpp
if (temp < min)
{
min = temp;
t = i + 1;
}
``` ```
## 选项 ## 选项
...@@ -45,17 +74,29 @@ int main(){ ...@@ -45,17 +74,29 @@ int main(){
### A ### A
```cpp ```cpp
if (temp > min)
{
min = temp;
t = i + 1;
}
``` ```
### B ### B
```cpp ```cpp
if (temp < min)
{
min = temp;
t = i - 1;
}
``` ```
### C ### C
```cpp ```cpp
if (temp > min)
{
min = temp;
t = i - 1;
}
``` ```
\ No newline at end of file
...@@ -15,42 +15,84 @@ ...@@ -15,42 +15,84 @@
</pre> </pre>
<p>要求从第s个数开始&#xff0c;数m个出列&#xff0c;第s个不出列</p> <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 ## template
```cpp ```cpp
#include <iostream> #include <iostream>
void JosePhus(int n, int m, int start) { void JosePhus(int n, int m, int start)
    int i, *arr = new int[n]; {
    int count = 1;; int i, *arr = new int[n];
    for(i = 0;i < n; i++) int count = 1;
        arr[i] = i + 1; ;
    int sum = n; for (i = 0; i < n; i++)
    while(count < n) { arr[i] = i + 1;
        start--; int sum = n;
        int index = (start+m-1) % sum; while (count < n)
        for(i = index; i < sum-1; i++) {
            arr[i] = arr[i+1]; start--;
        start = index + 1; int index = (start + m - 1) % sum;
        sum--; for (i = index; i < sum - 1; i++)
        count++; arr[i] = arr[i + 1];
    } start = index + 1;
    std::cout<< arr[0] <<"\n"; sum--;
count++;
}
std::cout << arr[0] << "\n";
} }
int main(int argc, const char * argv[]) { int main(int argc, const char *argv[])
    int n, m, start; {
    std::cout << "请输入n,m,start:\n"; int n, m, start;
    while(std::cin >> n >> m >> start) { std::cout << "请输入n,m,start:\n";
        JosePhus(n, m, start); while (std::cin >> n >> m >> start)
        std::cout << "请输入n,m,start:\n"; {
    } JosePhus(n, m, start);
    return 0; std::cout << "请输入n,m,start:\n";
}
return 0;
} }
``` ```
## 答案 ## 答案
```cpp ```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[]) { ...@@ -58,17 +100,23 @@ int main(int argc, const char * argv[]) {
### A ### A
```cpp ```cpp
for (i = index; i < sum - 1; i++)
arr[i] = arr[i + 1];
start = index - 1;
``` ```
### B ### B
```cpp ```cpp
for (i = index; i < sum; i++)
arr[i] = arr[i - 1];
start = index + 1;
``` ```
### C ### C
```cpp ```cpp
for (i = index; i < sum; i++)
arr[i] = arr[i - 1];
start = index - 1;
``` ```
\ No newline at end of file
# 海港(port) # 海港(port)
海港(port)
【问题描述】 **问题描述**
小谢是海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。 小谢是海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小谢对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船只到达的时间ti(单位:秒),船上的乘客数量Ki,以及每名乘客的国籍x(i,1),x(i,2),···,x(i,k)。 小谢对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船只到达的时间ti(单位:秒),船上的乘客数量Ki,以及每名乘客的国籍x(i,1),x(i,2),···,x(i,k)。
小谢统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。 小谢统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化的讲,你需要计算n条信息。对于输出的第i条信息,你需要统计满足:ti-86400<tp<=ti的船只p,在所有的x(p,j)中,总共有多少个不同的数。 形式化的讲,你需要计算n条信息。对于输出的第i条信息,你需要统计满足:ti-86400<tp<=ti的船只p,在所有的x(p,j)中,总共有多少个不同的数。
输入格式:第1行输入一个正整数n,表示小谢统计了n艘船的信息。
**输入格式**
第1行输入一个正整数n,表示小谢统计了n艘船的信息。
接下来的n行,每行描述一艘船的信息:前两个整数ti和ki分别表示这艘船到达海港的时间和船上的乘客数量,接下来的ki个整数x(i,j)表示从小谢第一次上班开始计时,这艘船在第ti秒到达海港。 接下来的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的和。输出格式 保证1<=n<=105,ki>=1,∑ki<=3×105,1<=x(i,j)<=105,1<=ti-1<ti<=109。其中∑ki表示所有ki的和。输出格式
输出n行,第i行输出一个整数表示第i艘船到达后的统计信息。 输出n行,第i行输出一个整数表示第i艘船到达后的统计信息。
【输入样例1】
**输入样例1**
```json
3 3
1 4 4 1 2 2 1 4 4 1 2 2
2 2 2 3 2 2 2 3
10 1 3 10 1 3
【输出样例1】 ```
**输出样例1**
```json
3 3
4 4
4 4
```
样例1说明:第一艘船在第一秒到达海港,最近24小时到达的船是第一艘船,共4个乘客,分别来自国家4,1,2,2,共来自3个不同的国家。 样例1说明:第一艘船在第一秒到达海港,最近24小时到达的船是第一艘船,共4个乘客,分别来自国家4,1,2,2,共来自3个不同的国家。
第2艘船在第2秒到达海港,最近24小时到达的船是第1艘船和第2艘船,共有4+2=6个乘客,分别来自国家4,1,2,2,2,3,共来自4个不同的国家; 第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个不同的国家。 第三艘船在第10秒到达海港,最近24小时到达的船是第1艘船、第2艘船和第3艘船,共有4+2+1=7个乘客,分别是来自国家4,1,2,2,2,3,3,共来自4个不同的国家。
【输入样例2】
**输入样例2**
```json
4 4
1 4 1 2 2 3 1 4 1 2 2 3
3 2 2 3 3 2 2 3
86401 2 3 4 86401 2 3 4
86402 1 5 86402 1 5
【输出样例2】 ```
**输出样例2**
```json
3 3
3 3
3 3
4 4
```
样例2说明:第一艘船在第一秒到达海港,最近24小时到达的船是第1艘,共有4个乘客,分别是来自国家1,2,2,3,共来自3个不同的国家。 样例2说明:第一艘船在第一秒到达海港,最近24小时到达的船是第1艘,共有4个乘客,分别是来自国家1,2,2,3,共来自3个不同的国家。
第2艘船是第3秒到达海港,最近24小时到达的船是第一艘船和第2艘船,共有4+2=6个乘客,分别来自1,2,2,3,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个不同的国家 第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个不同的国家 第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 ## template
```cpp ```cpp
...@@ -50,49 +140,59 @@ ...@@ -50,49 +140,59 @@
using namespace std; using namespace std;
int a[100100]; int a[100100];
int people[500100]; int people[500100];
struct node{ struct node
int country; {
int time; int country;
int time;
}; };
queue<node>q; queue<node> q;
int main(){ int main()
int n,sum=0; {
scanf("%d",&n); int n, sum = 0;
for(int i=1;i<=n;i++){ scanf("%d", &n);
int t,p; for (int i = 1; i <= n; i++)
scanf("%d%d",&t,&p); {
node temp; int t, p;
temp.time=t; scanf("%d%d", &t, &p);
for(int i=1;i<=p;i++){ node temp;
int cty; temp.time = t;
scanf("%d",&cty); for (int i = 1; i <= p; i++)
temp.country=cty; {
q.push(temp); int cty;
if(!people[cty]) sum++; scanf("%d", &cty);
people[cty]++; temp.country = cty;
} q.push(temp);
while(1){ if (!people[cty])
node old; sum++;
old=q.front(); people[cty]++;
if(temp.time-86400>=old.time) }
{ while (1)
int tc=old.country; {
people[tc]--; node old;
if(!people[tc]) sum--; old = q.front();
q.pop(); if (temp.time - 86400 >= old.time)
} {
else break; int tc = old.country;
} people[tc]--;
cout<<sum<<endl; if (!people[tc])
} sum--;
return 0; q.pop();
}
else
break;
}
cout << sum << endl;
}
return 0;
} }
``` ```
## 答案 ## 答案
```cpp ```cpp
people[tc]--;
if (!people[tc])
sum--;
``` ```
## 选项 ## 选项
...@@ -100,17 +200,23 @@ int main(){ ...@@ -100,17 +200,23 @@ int main(){
### A ### A
```cpp ```cpp
people[tc]++;
if (!people[tc])
sum--;
``` ```
### B ### B
```cpp ```cpp
people[tc]--;
if (!people[tc])
sum++;
``` ```
### C ### C
```cpp ```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.
先完成此消息的编辑!
想要评论请 注册