题面。
不好意思,当我看到 \(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;
}
标签:ch,Lightsabers,题解,ll,le,include,p1,CF958F1,buf
From: https://www.cnblogs.com/xhqdmmz/p/18127531