Codeforces Round 806 (Div. 4) D 字符串

题目链接:Codeforces Round 806 (Div. 4) D

给你长度最多为 8的 n个字符串 s1,s2,…,sn。

对于每个字符串 si,判断是否存在两个字符串 sj和 sk,使得 si=sj+sk。也就是说,si��是sj��和sk的串联。注意,j可以等于 k。

回顾一下,字符串s和t的连接为s+t=s1s2…spt1t2…tq,其中p和q分别是字符串s和t的长度。例如,"code "和 "force "的连接为 "codeforces"。

输入

第一行包含一个整数 t(1≤t≤104)--测试用例数。

每个测试用例的第一行包含一个整数 n (1≤n≤105)--字符串的个数。

然后是n行,其中第i行包含长度至多为88的非空字符串si,由小写英文字母组成。在给定的 n个字符串中,可能有相同(重复)的字符串。

所有测试案例中的n之和不超过105105。

输出

对于每个测试用例,输出长度为 n的二进制字符串。如果存在两个字符串 sj和 sk,其中 si=sj+sk的 i 位应该是 1,否则是 00。注意,j可以等于k。

 Codeforces Round 806 (Div. 4) D 字符串_第1张图片

在第一个测试案例中,我们有以下内容:

  • s1=s2+s2,因为 abab=ab+ab。请记住,j可以等于k。
  • s2不是列表中任何两个字符串的连接。
  • s3=s2+s5,因为 abc=ab+c.
  • s4不是列表中任意两个字符串的连接。
  • s5不是列表中任何两个字符串的连接。

由于只有s1和s3满足条件,答案中只有第一位和第三位应该是1,所以答案是10100。

// Problem: D. Double Strings
// Contest: Codeforces - Codeforces Round 806 (Div. 4)
// URL: https://codeforces.com/contest/1703/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include
using namespace std;

typedef long long ll;

const int N = 2e5+5;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int T;
	cin>>T;
	while(T--){
		int n;
		cin>>n;
		vector a(n+1);
		map mp;
		for(int i=1;i<=n;i++){
			cin>>a[i]; 
			mp[a[i]]=true;
		}
		string ans="";
		for(int i=1;i<=n;i++){
			string t=a[i];
			bool flag=false;
			
			for(int j=0;j

 

注意:vector a(n+1)改为string a[N],会导致超时,不知道为什么

第二种方法:

#include 

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int tt;
  cin >> tt;
  while (tt--) {
    int n;
    cin >> n;
    vector a(n);
    map mp;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
      mp[a[i]]++;
    }
    string ans;
    for (int i = 0; i < n; i++) {
      bool ok = false;
      for (int j = 0; j < int(a[i].size()); j++) {
        if (mp.count(a[i].substr(0, j)) && mp.count(a[i].substr(j))) {
          ok = true;
        }
      }
      if (ok) {
        ans += '1';
      } else {
        ans += '0';
      }
    }
    cout << ans << '\n';
  }
  return 0;
}

你可能感兴趣的:(算法,c++)