8 条题解

  • 2
    @ 2023-10-6 20:16:53

    周期串问题 我们可以设置循环从1开始假设周期(周期一定能被字符串长度整除) 再用循环判断 如为真 就跳出循环 输出周期 如为假 则变量加1 再次进行如上判断 若到循环结束依然无法判断 则该字符串长度便为周期

    • 1
      @ 2025-1-14 22:34:29

      简单暴力,不必多言

      #include <iostream>
      #include <vector>
      using namespace std;
      int main(){
          ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
          int n;
          cin >> n;
          string s;
          cin >> s;
          for(int i = 1 ; i <= n ; i++){
              if(n % i == 0){
                  string ss = "";
                  for(int j = 1 ; j <= i ; j++){
                      ss += s[j - 1];
                  }
                  string p = "";
                  int x = n / i;
                  while(x--){
                      p += ss;
                  }
                  if(p == s){
                      cout << i;
                      break;
                  }
              }
          }
          return 0;
      }
      
      • 1
        @ 2024-9-27 17:57:38
        #include <bits/stdc++.h>
        using namespace std;
        int main(){
        	int n; scanf("%d", &n);
        	char s[n + 2]; scanf("%s", s + 1);
        	for(int i = 1;i <= n;i ++){
        		if(n % i != 0) continue;
        		int f = 1;
        		for(int j = 1;j <= n / i; j ++){
        			for(int k = 1;k <= i; k ++){
        				if(s[k] != s[k + (j - 1) * i]){
        					f = 0; break;
        				}
        			}
        			if(f == 0) break;
        		}
        		if(f){
        			printf("%d", i); return 0;
        		}
        	}
        }
        
        • 1
          @ 2023-9-5 11:32:49
          #include<stdio.h>
          int main()
          {
          	int m=0,n=1000,x=0;
          	int min=m+1;
          	scanf("%d",&n);
          	char ch[min+n+5];
          	scanf("%s",ch);//1234123
          	for(;;)
          	{
          		int i=x+min;
          		while(i<n)
          		{
          			if(ch[x]==ch[i])
          			i+=min;
          			else
          			{
          			min+=1;
          			i=min;
          			}
          		}//23323323
          		if(x+1<min)
          		{
          			x++;
          			continue;
          		}
          		else if(n%min!=0)
          		{
          			printf("%d",n);
          			break;
          		}
          		else if(ch[min-1]==ch[n-1])
          		{
          			printf("%d",min);
          			break;
          		}
          		
          	}
          	return 0;
          }
          
          • 0
            @ 2024-8-3 13:18:55

            指针

            #include<iostream> #include<string> using namespace std;

            int main() { int n; string s; cin >> n; while(n--) { char c; cin >> c; s += c; } size_t i = 0 , j = 0 , pos_1 = 0 , pos_2 = 1; while(pos_2 < s.size()) { if(s[pos_1] == s[pos_2]) { if(pos_1 != j) { pos_1++,pos_2++; } else { pos_1 = i; pos_2++; } } else { pos_1 = i; if(j+1 != pos_2) j++; else { pos_2++; j++; } } } while(pos_1 != i && j + 1 != pos_2) j++; cout << j - i + 1 << endl; return 0; }

            • 0
              @ 2024-4-24 22:30:07
              #include <stdio.h>
              int main()
              {
                  
                  int n,i=1,t,c;
                  char a[1001];
                  scanf("%d",&n);
                  scanf("%s",&a);
                  while(i<n)
                  {
                      t=0;
                      while(t<=i)
                      {
                          if(a[t]!=a[n-1-i+t]){c=0;i++;break;}
                          else c=1;
                          t++;
                      }
                      if(c==1){printf("%d",t);break;}
              
                  }
                  
                  return 0;
              }
              //
              
              • 0
                @ 2023-9-25 20:00:00

                #include<stdio.h> int find(char*s,int N){ for(int i=1;i<=N/2;i++){ if(N%i==0){ int isRepeat=1; for(int j=0;j<N;j++){ if(s[j]!=s[j%i]){ isRepeat=0; break; } }if(isRepeat){ return i; } } }return N; } int main(){ int N; scanf("%d",&N); char s[1001]; scanf("%s",s); int min=find(s,N); printf("%d",min); return 0; }

                • 0
                  @ 2023-8-14 22:57:45

                  #include<iostream> #include<cstring> using namespace std;

                  int main(){ int N; cin>>N; string str; cin>>str; for(int i=1;i<=N;i++) { if(N%i0) { int flag = 0; for(int k = i;k < N;k++) { if(str[k]!=str[k-i]) { flag = 1; break; } } if(flag0) { cout<<i; break; } }

                  }
                  cout<<endl;
                  return 0;
                  

                  }

                  • 1

                  信息

                  ID
                  49
                  时间
                  1000ms
                  内存
                  128MiB
                  难度
                  7
                  标签
                  (无)
                  递交数
                  1612
                  已通过
                  387
                  上传者