3.1 简单模拟
[PAT B1001] 简单模拟
[PAT B1032] 简单模拟
Contest100000575 - 《算法笔记》3.1小节——入门模拟->简单模拟
问题 A: 剩下的树
和我之前写过的差分算法非常相似。
可以看这篇回顾一下:c/c++差分算法的应用
代码:
#include<iostream>
#include<vector>
using namespace std;
int main() {
int L=-1, M=-1;
while (1) {
cin >> L >> M;
if (L == 0 && M == 0) break;
vector<int> tree_remove(L + 2, 0);
for (int i = 1, l, r; i <= M; i++) {
cin >> l >> r;
tree_remove[l]++;
tree_remove[r + 1]--;
}
for (int i = 1; i <= L; i++) {
tree_remove[i] += tree_remove[i - 1];
}
int count = 0;
for (int i = 0; i <= L; i++) {
if (tree_remove[i] == 0) count++;
}
cout << count<<endl;
}
return 0;
}
另类的需要和题目思维反着来的模拟:c/c++简单的模拟_洛谷P1003 [NOIP2011 提高组] 铺地毯
3.2 查找元素
[codeup 1934]找x
题目很简单,但是codeup的多点测试,需要循环输入。用书上写的这种能通过。
#include<stdio.h>
int for_search[205];
int main() {
int n;
while (scanf("%d",&n)!= EOF) {
for (int i = 0; i < n; i++) {
scanf("%d",&for_search[i]);
}
int x;
scanf("%d", &x);
int i = 0;
for (i = 0; i < n; i++) {
if (x == for_search[i]) {
printf("%d\n", i);
break;
}
}
if (i == n) {
printf("-1\n");
}
}
return 0;
}
问题 C: 查找学生信息
感觉这题对结构体语法要求更多。
#include <stdio.h>
#include <string.h>
struct student {
char id[100];
char name[100];
char gender[5];
int age;
}stu[1005];
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
scanf("%s%s%s%d", &stu[i].id, &stu[i].name, &stu[i].gender, &stu[i].age);
}
int m, j;
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
char id1[5];
scanf("%s", &id1);
for (j = 0; j < n; j++)
{
if (strcmp(stu[j].id,id1) == 0)
{
printf("%s %s %s %d\n", stu[j].id, stu[j].name, stu[j].gender, stu[j].age);
break;
}
}
if (j == n) printf("No Answer!\n");
}
}
return 0;
}