标签:com 起点 line 但我 summary queue += 计算 卡住
CF1324A Yet Another Tetris Problem
长度为n的数组a中有一组数,可以任意使其中一项+2,问能否使a中所有项的值相同。
感觉div.3的题目更多地在考简化问题的能力……比如原题目以俄罗斯方块作背景,让我想到的是能不能消除所有方块,导致代码很难写。但如果像上述一样简化题意,方向就很明确了:只要判断是否所有数均为偶数/均为奇数即可。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;
int main()
{
int a[110];
int kase;
cin>>kase;
while(kase--){
int n;
cin>>n;
a[0]=a[n+1]=0;
int ok=1;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]%2==0?a[i]=-1:a[i]=-2;//偶数记为-1,奇数记为-2
if(i==1) continue;
if(a[i]!=a[1]) ok=0;
}
if(ok) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
CF1324B Yet Another Palindrome Problem
判断a串中是否存在长度3及以上的回文子串
简化问题:是否存在长度3的回文子串
再简化:是否存在两个不相邻的相等元素
简化到核心部分已经直接表明代码应该怎么写了……但是具体细节还是要展开一下:
在遍历a串的过程中,用vis数组标记遇到的数字,并记录这个数字第一次出现时的下标。如果遍历到的数字是第二次遇到(\(vis[a[i]]!=0\)), 那么与第一次遇到该数字的位置作个距离计算,只要\(>1\)就能说明不相邻,可以作为首尾构成回文子串。
?
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;
int a[5010];
int vis[5010];
int main()
{
int t;
cin>>t;
while(t--){
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
int n;
cin>>n;
int ok=0;
for(int i=1;i<=n;i++) {
cin>>a[i];
if(!vis[a[i]]) vis[a[i]]=i;
else if(i-vis[a[i]]>1) ok=1;
}
if(ok) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
一只青蛙跳方格,只能向左向右跳。起点只能向右跳。其它格子写有L、R,代表青蛙在此方格上后的跳跃方向。青蛙可以选择一个距离\(d\),每一次跳跃都可以跳到距离\(<=d\)的格子上,问可以跳到终点的最小的\(d\)。
逆向思考一波。显然终点只能由离它最近的R格子跳过去,但我当时的思考就到这里了,然后就卡住了……
结合题意,对于两个间接相邻的R格子,总是可以从右边的R格子跳到左边的R格子(因为它们之间必定是连续的L),如果逆向思考,我们也只能这样跳回起点——也就是说,只要考虑路上所有间接或直接相邻的R格子的之间的距离,取其中最大值,就能保证选用的\(d\)可以从终点跳回起点。
?
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
string a="R";
string x;
cin>>x;
a+=x;
int last=0;
int m=0;
for(int i=0;i<a.length();i++){
if(a[i]==‘R‘){
m=max(m,i-last);
last=i;
}
}
int ans;
int k=a.length()-last;
ans=max(m,k);
cout<<ans<<endl;
}
return 0;
}
Codeforces Round #627 (Div. 3) 补题
标签:com 起点 line 但我 summary queue += 计算 卡住
原文地址:https://www.cnblogs.com/streamazure/p/12590358.html