[UpCoder] LOGIN_UP2 – Xác nhận Upcoder 2

1. Đề bài LOGIN_UP2

Như ta đã biết, trong đợt thi quá trình đợt 1 vừa rồi. Do bị tấn công DDOS nên hệ thống upcoder.xyz không hoạt động ổn định.
Để chống lại điều này, hệ thống yêu cầu mọi người phải nhập một xâu kí tự bất kì để được cho phép đăng nhập vào hệ thống, xâu này chỉ gồm các chữ cái từ ‘a‘…’z‘, không chứa ký tự trắng. Sao cho khi xóa đi một số chữ cái nào đó thì xâu đó trở thành “upcoder“. Tất nhiên là không được tráo đổi vị trí các chữ cái, mà chỉ được xóa bớt đi một số chữ cái.
Ví dụ Tèo muốn vào trang upcoder.xyz. Sau khi gõ địa chỉ trang web, hệ thống thông báo nhập Tèo nhập vào một xâu ký tự. Tèo gõ: “ahihiupcccccodeeeerrr“, hệ thống sẽ xem xét xâu này và tự động loại bỏ các chữ cái để trở thành từ “upcoder“. Như vậy Tèo vào được hệ thống.
Tý cũng muốn vào hệ thống, nhưng Tý gõ: “uppdcoer“, hệ thống không thể làm cách nào để xóa bớt chữ cái để trở thành từ “upcoder” được. Như vậy Tý không vào được hệ thống.
Nhiệm vụ của bạn là xác định xem, trong một đợt kiểm tra có n sinh viên muốn vào hệ thống để thi, mỗi sinh viên phải nhập một xâu, hỏi bao nhiêu sinh viên được chấp nhận để vào hệ thống làm bài.

Input

  • Dòng đầu tiên là số nguyên dương n (1<= n <=500) – là số sinh viên muốn đăng nhập hệ thống.
  • n dòng tiếp theo, mỗi dòng là 1 xâu mà từng sinh viên sẽ nhập (độ dài mỗi xâu không quá 100 ký tự)

Output

  • Dòng 1: số m là số lượng sinh viên được cho phép vào hệ thống.
  • Dòng 2: m số nguyên dương (mỗi số cách nhau một khoảng trắng). Là số thứ tự các sinh viên được cho phép vào hệ thống theo thứ tự tăng dần.

Ví dụ

Input:
5
ahihiupcccccodeeeerrr
uppdcoer
upxyzcccccteoder
abcxyz
luxubu

Output:

2
1 3
Giải thích:
Có 2 sinh viên được cho phép vào hệ thống là sinh viên thứ 1 và thứ 3.
Vì xâu của 2 sinh viên này nhập vào thỏa yêu cầu mà hệ thống xử lý.

2. Code tham khảo Xác nhận Upcoder 2

#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;

char a[501][101], demo[]="upcoder";
int n, m=0, dd[501];

int check(char a[])
{
    int j=0;
    for (int i=0; i<strlen(a); i++)
        if (a[i]==demo[j])
        {
            j++;
            if (j==7)
                return 1;
        }
    return 0;
}

int main()
{
    cin >> n;
    for (int i=0; i<n; i++)
    {
        cin >> a[i];
        dd[i]=0;
    }

    for (int i=0; i<n; i++)
        if (check(a[i]))
        {
            dd[i]=1;
            m++;
        }
    cout << m<< endl;
    for (int i=0; i<n; i++)
        if (dd[i])
            cout << i+1 << " ";
    return 0;
}

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *