标签:
A. Lineland Mail (567A Lineland Mail)
题目描述:
给出n个升序排列的数,问每个数与除自身之外的n-1个数的绝对值最大和最小分别是什么?
解题思路:
因为给出的序列已经排好序了,对于每个数绝对值最小的肯定是左右相邻的两个数的绝对值取最小啦,绝对值最大就是和第一个数或者最后一个数的绝对值取最大咯,第一个数和最后一个数特殊处理一下就好啦。
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 7 const int maxn = 100005; 8 int a[maxn]; 9 int main () 10 { 11 int n; 12 while (scanf ("%d", &n) != EOF) 13 { 14 for (int i=1; i<=n; i++) 15 scanf ("%d", &a[i]); 16 a[0] = a[2], a[n+1] = a[n-1]; 17 for (int i=1; i<=n; i++) 18 { 19 __int64 Min, Max; 20 Min = min (abs(a[i]-a[i-1]), abs(a[i]-a[i+1])); 21 Max = max (abs(a[i]-a[1]), abs(a[i]-a[n])); 22 printf ("%I64d %I64d\n", Min, Max); 23 } 24 } 25 return 0; 26 }
B. Berland National Library (567B Berland National Library)
题目描述:
有一个图书馆管理系统,可以记录同学们的进去记录。每个同学都有一个图书编号,现在给一段记录,问根据这段记录,图书馆至少要能容纳多少的人?
解题思路:
因为每个童鞋都有一个不同的编号,当童鞋进图书馆的话,那么这个同学刚开始肯定不在图书馆,当童鞋出图书馆的话,这个同学有可能是在这段记录之前进入图书馆的,也有可能是在记录中进去图书馆的。注意到这一点后,模拟一下就ok啦。
1 #include <queue> 2 #include <vector> 3 #include <cstdio> 4 #include <cstring> 5 #include <iostream> 6 #include <algorithm> 7 using namespace std; 8 9 const int maxn = 1000005; 10 bool vis[maxn]; 11 int main () 12 { 13 int t, Max, num, ans; 14 while (scanf("%d", &t) != EOF) 15 { 16 Max = ans = 0; 17 memset (vis, false, sizeof(vis)); 18 while (t --) 19 { 20 char s[2]; 21 scanf ("%s %d", s, &num); 22 if (s[0] == ‘-‘) 23 { 24 if (!vis[num]) 25 Max ++; 26 else 27 ans --; 28 vis[num] = false; 29 } 30 else 31 { 32 ans ++; 33 vis[num] = true; 34 } 35 Max = max (Max, ans); 36 } 37 printf ("%d\n", Max); 38 } 39 return 0; 40 }
C, D先留个坑,写出两个先给学弟学美做题解~~~
标签:
原文地址:http://www.cnblogs.com/alihenaixiao/p/4711396.html