题目解析:
T1.新冠病毒群体免疫(covid)
题目描述:
新冠病毒肆虐全球将近两年了, 给世界各国都带来了极大的麻烦, 为了最终能战胜新冠病毒, 各个国家都在加紧研发疫苗,我们国家目前已研发出了灭活疫苗、腺病毒载体疫苗等多款不同技术的新冠疫苗,在满足自己使用的同时,也帮助了很多的国家,一起阻遏病毒肆虐。预防胜于治疗, 只有达到一定的接种疫苗比例,即实现群体免疫,才是战胜新冠病毒的王道。研究表明,不同的疫苗效力,实现群体免疫的人口接种疫苗比例是不同的,假设一个国家接种疫苗的人口只要达到该国家总人口的 75%,即可实现群体免疫。请计算一个国家需要接种多少人才能实现群体免疫。(注意结果四舍五入)
题目分析:
只需要用国家总人数乘 0.75 即可,至于四舍五入,先将其 +0.5,在取整即可。
题目正解:
#include <bits/stdc++.h>
using namespace std;
double n;
int main(){
cin >> n;
n *= 0.75;
cout << int(n+0.5);
return 0;
}
T2.整理书本(book)
题目描述:
又一个学期结束了, 又积累了好多本书, 你决定好好整理一下,整理时共有三种操作, 规则如下:
1 p 表示把编号为 p 的书放到最前面
2 p 表示把编号为 p 的书放到最后面
3 p q 表示把编号为 p 的书放到编号为 q 的书的后面
1、2、3 分别代表整理操作的种类, p、q 表示书的编号,他们之间由空格分隔;已知在整理之前,所有书从 1 开始依次编号排放。
题目分析:
由于数据量太大,所以枚举算法会超时,我们应该考虑链表。
题目正解:
#include <bits/stdc++.h>
using namespace std;
const int N = 1E5 + 10;
int Left[N], Right[N];
inline void link(int L, int R){
Right[L] = R;
Left[R] = L;
}
int main(){
int n, m;
cin>>n>>m;
for(int i=1; i<=n; i++){
Left[i] = i-1;
Right[i] = (i+1) % (n+1);
}
Left[0] = n;
Right[0] = 1;
int c, x, y;
int head = 1, tail = n;
int Lx, Rx, Ly, Ry;
for(int i=1; i<=m; i++){
cin>>c;
if(c == 1){
cin>>x;
head = Right[0];
if(x == head) continue;
Lx = Left[x], Rx = Right[x];
link(Lx, Rx);
Left[head] = x;
Right[x] = head;
Left[x] = 0;
Right[0] = x;
}
if(c == 2){
cin>>x;
tail = Left[0];
if(x == tail) continue;
if(n <= 1) continue;
Lx = Left[x], Rx = Right[x];
link(Lx, Rx);
Right[tail] = x;
Left[x] = tail;
Right[x] = 0;
Left[0] = x;
}
if(c == 3){
cin>>x>>y;
if(x == y) continue;
if(n <= 1) continue;
if(Right[y] == x) continue;
Lx = Left[x], Rx = Right[x];
Ly = Left[y], Ry = Right[y];
link(Lx, Rx);
link(x, Ry);
link(y, x);
}
}
int b = Right[0];
for(int i=1; i<=n; i++){
cout<<b<<" ";
b = Right[b];
}
return 0;
}
标签:信息学,Right,题目,int,新冠,疫苗,2021,合肥市,Left From: https://www.cnblogs.com/yangzichen/p/17096699.html