CF958F1 Lightsabers (easy) 题解

题面

不好意思,当我看到 \(1 \le n \le 100\)\(1 \le m \le n\) 的那一刻,我承认我心动了。

题目没翻译,用翻译软件翻译了才看懂。

思路

依据题意直接模拟即可。这里我用了三层循环来模拟。第一层为 \(len\),表示长度;第二层为 \(from\),表示出发点,此时需要遍历的区间的终点 \(to=from+len-1\),直接遍历,用一个桶数组记录下这里面每个数出现的次数。

每次遍历完后额外进行判断,当满足题意时直接输出 YES 结束程序,否则一律输出 NO。注意每次开始时桶数组要清空。

本题数据范围极小,上述思路复杂度合理,可以通过此题。

代码

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#define ll long long
#define inf 0x3f3f3f3f
#define fr(i , a , b) for(ll i = a ; i <= b ; ++i)
#define fo(i , a , b) for(ll i = a ; i >= b ; --i)
#pragma comment(linker , "/stack : 200000000")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
inline char gchar()
{
    static char buf[1000000] , *p1 = buf , *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf , 1 , 1000000 , stdin) , p1 == p2) ? EOF : *p1++;
}
inline ll read()
{
    ll x = 0 , f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9')
	  {
        if(ch == '-')
        {
        	f = -1;
		}
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
	  {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}
ll n , m;
ll a[101] , b[101];
ll t[101] , flag;
signed main()
{
    n = read();
    m = read();
    fr(i , 1 , n)
    {
		a[i] = read();
	}
	fr(i , 1 , m)
	{
		b[i] = read();
	}
	fr(len , 1 , n)
	{
		fr(from , 1 , n)
		{
			flag = 0;
			fr(i , 1 , m)
			{
				t[i] = 0;
			}
			ll to = from + len - 1;
			fr(i , from , to)
			{
				t[a[i]]++;
			}
			fr(i , 1 , m)
			{
				if(t[i] != b[i])
				{
					flag = 1;
					break;
				}
			}
			if(!flag)
			{
				printf("YES");
				return 0;
			}
		}
	}
	printf("NO");
    system("pause");
    return 0;
}
posted @ 2024-04-10 21:34  心海秋的墨木仄  阅读(11)  评论(0编辑  收藏  举报