暑假刷题第13天--7/27

141. 周期 - AcWing题库(kmp)

#include
#include
#include
#include

using namespace std;

const int N = 1000010, M = 100010;

typedef long long LL;
typedef pair PII;

char s[N];
int ne[N];
int n, m;

int main() {
    cin >> n;
    int idx = 1;
    while (n) {
        cin >> s + 1;
        for (int i = 2, j = 0; i <= n; i++) {
            while (j && s[i] != s[j + 1]) j = ne[j];
            if (s[i] == s[j + 1]) j++;
            ne[i] = j;
        }
        printf("Test case #%d\n", idx++);
        for (int i = 2; i <= n; i++) {
            if (i % (i - ne[i]) == 0 && ne[i])
                cout << i << ' ' << i / (i - ne[i]) << endl;
        }
        cout << endl;
        cin >> n;
    }
    return 0;
}

记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)(kmp模板)

#include
#include
using namespace std;
int nex[1000006];
int f[1000006];
void cal_next(string s){
	for(int i=1,j=0;i>s1>>s2;
	cal_next(s2);
	kmp(s1,s2);
	for(int i=0;i

137. 雪花雪花雪花 - AcWing题库(最小表示法+hash)

#include
#include
#include
#include
using namespace std;
#define ull unsigned long long
int nex[100005];
string s[100005];
const int N=6;
int a[N];
int w=13331;
mapma;
int main(){
	int n;
	cin>>n;
	int f=0;
	for(int t=0;t>a[i];
		}
		if(f==1)continue;
		int k=0,i=0,j=1;
		while(k<6&&i<6&&j<6){
			if(a[(i+k)%6]==a[(j+k)%6])k++;
			else {
				a[(i+k)%6]>a[(j+k)%6]?i=i+k+1:j=j+k+1;
				if(i==j)i++;
				k=0;
			}
		}
		i=min(i,j);
		ull cnt=0;
		for(int q=0;q<6;q++){
			cnt=cnt*w+a[(q+i)%6];
		}
		reverse(a,a+6);
		k=0,i=0,j=1;
		while(k<6&&i<6&&j<6){
			if(a[(i+k)%6]==a[(j+k)%6])k++;
			else {
				a[(i+k)%6]>a[(j+k)%6]?i=i+k+1:j=j+k+1;
				if(i==j)i++;
				k=0;
			}
		}
		i=min(i,j);
		ull cnt1=0;
		for(int q=0;q<6;q++){
			cnt1=cnt1*w+a[(q+i)%6];
		}
		if(ma[cnt1]==1||ma[cnt]==1)f=1;
		ma[cnt1]=1;
		ma[cnt]=1;
	}
	if(f==1){
		cout<<"Twin snowflakes found."<

 AcWing 4672. 布料排序 - AcWing(简单排序)

#include
#include
#include
#include
using namespace std;
int w=131;
#define ull unsigned long long
struct node{
	string c;
	int d,u;
}a[1005],b[1005];
bool cmp(node x,node y){
	if(x.c!=y.c)return x.c>y.c;
	return x.u>y.u;
}
bool cmp1(node x,node y){
	if(x.d!=y.d)return x.d>y.d;
	return x.u>y.u;
}
int cnt=0;
void solve(){
	int n;
	cin>>n;
	for(int i=0;i>a[i].c>>a[i].d>>a[i].u;
		b[i].c=a[i].c;
		b[i].d=a[i].d;
		b[i].u=a[i].u;
	}
	sort(a,a+n,cmp);
	sort(b,b+n,cmp1);
	int ans=0;
	for(int i=0;i>t;
	while(t--){
		solve();
	} 
} 

142. 前缀统计 - AcWing题库(字典树)

#include
#include
#include
#include
using namespace std;
const int N=1000005;
int nex[N][26],exist[N];
int cnt;
void intsert(string s){
	int p=0;
	for(int i=0;i>n>>m;
	for(int i=0;i>s;
		intsert(s);
	}
	for(int i=0;i>s;
		cout<

你可能感兴趣的:(暑假打卡,算法,c++,数据结构)