标签:specific item math ack i++ title rom aci rand
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain 1, 2, 3, 4, 5, 6, 7 from the stack, but not 3, 2, 1, 7, 5, 6, 4.
Each input file contains one test case. For each case, the first line contains 3 numbers (all no more than 1000): M (the maximum capacity of the stack), N(the length of push sequence), and K (the number of pop sequences to be checked). Then K lines follow, each contains a pop sequence of N numbers. All the numbers in a line are separated by a space.
For each pop sequence, print in one line "YES" if it is indeed a possible pop sequence of the stack, or "NO" if not.
5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2
YES
NO
NO
YES
NO
using System; using System.Collections.Generic; using System.Text; class T { static void Main(string[] args) { var line = Console.ReadLine().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); var maxNum = int.Parse(line[0]); var lineNum = int.Parse(line[1]); var lineCount = int.Parse(line[2]); List<string> list = new List<string>(); for (int i = 0; i < lineCount; i++) { list.Add(Console.ReadLine()); } foreach (var item in list) { string Y = "YES"; var numss = item.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); List<int> nums = new List<int>(); foreach (var item2 in numss) { nums.Add(int.Parse(item2)); } for (int i = 0; i < nums.Count; i++) { if (i > 0) { if (nums[i - 1] - nums[i] > 1) { Y = "NO"; break; } } if (nums[i] > maxNum ) { Y = "NO"; break; } else { for (int j = i + 1; j < nums.Count; j++) { if (nums[i] < nums[j]) { nums[j]--; } } } } Console.WriteLine(Y); } } }
标签:specific item math ack i++ title rom aci rand
原文地址:https://www.cnblogs.com/interim/p/9723196.html