NC54232. binary
描述
输入描述
第一行数据组数,对于每组数据:
第一行串,第二行串
输出描述
对于每组数据输出YES或者NO表示是否为好的
示例1
输入:
3 110 101 101 101000010100010111101000010 1100 101010
输出:
YES YES NO
说明:
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 412K, 提交时间: 2019-12-21 14:03:58
#include<bits/stdc++.h> using namespace std; const int N=1e3+10; char s[N],t[N]; int dp[N]; int main() { int _;cin>>_;while(_--) { scanf("%s%s",s+1,t+1); memset(dp,0,sizeof(dp)); int n=strlen(s+1); int m=strlen(t+1); reverse(s+1,s+1+n); reverse(t+1,t+1+m); dp[0]=1; for(int i=0;i<m;++i){ if(!dp[i]) continue; int k=t[i+1]^s[1]; for(int j=1;j<=n;++j){ if((s[j]^t[i+j])!=k) break; if(s[j]!=s[j+1]) dp[i+j]=1; } } if(dp[m]) puts("YES"); else puts("NO"); } }
C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 420K, 提交时间: 2023-01-20 16:26:55
#include <bits/stdc++.h> using namespace std; const int N = 1010; char s[N],t[N]; int T,f[N]; int main() { cin >> T; while(T--) { scanf("%s",s+1); scanf("%s",t+1); int n=strlen(s+1),m=strlen(t+1); memset(f,0,sizeof f); reverse(s+1,s+n+1),reverse(t+1,t+m+1); f[0]=1; for(int i=0;i<m;i++) { if(!f[i]) continue; int k=t[i+1]^s[1]; for(int j=1;j<=n&&i+j<=m;j++) { if((s[j] ^ t[i + j]) != k) break; if(s[j] != s[j + 1]) f[i + j] = 1; } } if(f[m]) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }