201412第3次
视频题解(暂无)
暂无
第 1 题 门禁系统
题目链接: 门禁系统
TAG: 模拟
STL
思路:
用map或者数组记录数字出现次数即可
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N]; // a[i]表示第i个数出现的次数,初始为0
int main(){
int n;
cin>>n;
while(n--){
int t;
cin>>t;
cout<<++a[t]<<" ";
}
return 0;
}
|
第 2 题 Z 字形扫描
题目链接: Z 字形扫描
TAG: 模拟
循环
思路:
分奇偶分段模拟即可,可以看看注释
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 | #include<bits/stdc++.h>
using namespace std;
const int N=510;
int a[N][N];
int main(){
int n;
cin>>n;
// 读入n行n列的数组
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
// 先输出斜着的前n列
for(int i=1;i<=n;i++){
if(i&1){ // 列数是奇数的情况
for(int j=i;j>=1;j--){
cout<<a[j][i+1-j]<<" ";
}
}else{ // 列数是偶数的情况
for(int j=1;j<=i;j++){
cout<<a[j][i+1-j]<<" ";
}
}
}
// 再输出斜着的后n-1列,具体实现类似上面
for(int i=n+1;i<=2*n-1;i++){
if(i&1){
for(int j=n;j>=i-n+1;j--){
cout<<a[j][i+1-j]<<" ";
}
}else{
for(int j=i-n+1;j<=n;j++){
cout<<a[j][i+1-j]<<" ";
}
}
}
return 0;
}
|
第 3 题 集合竞价
题目链接: 集合竞价
TAG: 大模拟
思路:
按题意进行模拟即可,需要处理的情况稍微复杂一点点,代码注释中有详细解释。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 | #include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=5010;
// 使用结构体存储每一笔交易的信息
struct Node{
string type; // 交易类型
double price; // 交易价格
int num; // 交易数量
bool status; // 交易状态,即是否被撤销,true为被撤销
}node[N];
int main(){
int cnt=1; // 第几行数据
while(cin>>node[cnt].type>>node[cnt].price){
if(node[cnt].type=="cancel"){
node[cnt].status=true; // cancel操作也可以认为是被撤销的交易
node[(int)node[cnt].price].status=true; // 将相对应的交易撤销
cnt++;
continue;
}
cin>>node[cnt].num; // 不是撤销操作的话还需要再读入交易数量
cnt++;
}
cnt--; // 由于最后多加了一次cnt,这里需要将其减回来
ll ans=0; // 记录最终答案的交易量
double ansp=0; // 记录最终答案的交易价格
for(int i=1;i<=cnt;i++){ // 对于可能出现的每一种价格进行枚举
if(node[i].status){ // 如果该交易被撤销直接跳过即可
continue;
}
double tmp=node[i].price; // 记录当前情况下的开盘价
ll sum1=0,sum2=0; // 分别记录buy和sell的数量
for(int j=1;j<=cnt;j++){ // 枚举每一笔交易
if(node[j].status){ // 如果该交易被撤销直接跳过即可
continue;
}
if(node[j].type=="buy"&&node[j].price>=tmp){ // 累加到buy中
sum1+=node[j].num;
}else if(node[j].type=="sell"&&node[j].price<=tmp){ // 累加到sell中
sum2+=node[j].num;
}
}
ll sum=min(sum1,sum2); // 取较小值
// 更新答案
if(sum==ans&&tmp>ansp){
ansp=tmp;
}else if(sum>ans){
ans=sum;
ansp=tmp;
}
}
// 按格式输出,即价格保留2位小数,交易量为整数
cout<<fixed<<setprecision(2)<<ansp<<setprecision(0)<<" "<<ans;
return 0;
}
|
第 4 题 最优灌溉(暂无)
题目链接: 最优灌溉
TAG: 暂无
思路:
暂无
代码:
第 5 题 货物调度(暂无)
题目链接: 货物调度
TAG: 暂无
思路:
暂无
代码: