George and Accommodation问题解析
题目
George has recently entered the BSUCP (Berland State University for Cool Programmers). George has a friend Alex who has also entered the university. Now they are moving into a dormitory.
George and Alex want to live in the same room. The dormitory has n rooms in total. At the moment the i-th room has pi people living in it and the room can accommodate qi people in total (pi ≤ qi). Your task is to count how many rooms has free place for both George and Alex.
Time limit | Memory limit | Source | Tag | Editoria |
---|---|---|---|---|
1000 ms | 262144 kB | Codeforces Round #267 (Div. 2) | simplementation *800 | Announcement |
Input
The first line contains a single integer n (1 ≤ n ≤ 100) — the number of rooms.
The i-th of the next n lines contains two integers pi and qi (0 ≤ pi ≤ qi ≤ 100) — the number of people who already live in the i-th room and the room’s capacity.
Output
Print a single integer — the number of rooms where George and Alex can move in.
Example
input | output |
---|---|
3 1 1 2 2 3 3 | 0 |
3 1 10 0 10 10 10 | 2 |
问题链接:CodeForces - 467A
问提描述
乔治和艾利克斯要住进同一个宿舍,输入数据第一行为宿舍总数n,而后会有n行的输入,每一行有两个数据分别是宿舍中已经入住的人数和宿舍可以入住的人数,得到所有数据后计算有几个宿舍可供两个人入住。
问题分析
首先获得有几个宿舍的数据,然后新建一个长度为n*2的数组用于储存宿舍人数情况,最后利用一个计数器记录那些宿舍的空位大于等于2,输出计数器的值即可。
AC通过的C++语言程序代码如下:
#include<iostream>
using namespace std;
int main()
{
int n;
int counter = 0;
cin >> n;
int *dom = new int[n*2];
for (int i = 0; i < n * 2; i++)
cin >> dom[i];
for (int i = 0; i < n * 2; i += 2)
if (dom[i + 1] - dom[i] >= 2)
counter++;
cout << counter;
}
代码分析
一开始声明了两个变量,n是宿舍总数,counter是计数器,然后动态创建数组dom来储存人数情况
int n; //宿舍总数
int counter = 0; //计数器
cin >> n; //获得宿舍总数
int *dom = new int[n*2]; //根据宿舍总数创建数组
然后就是输入宿舍的人数情况
for (int i = 0; i < n * 2; i++)
cin >> dom[i];
然后就会得到一个储存着:已有,总数,已有,总数…的数组
之后就计算有几个宿舍有两个以上空位
for (int i = 0; i < n * 2; i += 2)
if (dom[i + 1] - dom[i] >= 2)
counter++;
这里利用之前输入数据的格式,每两个数据为一组进行一次循环,遇到可入住数减去已入住数大于2的,计数器就加1,最后输出计数器的值即可。