我們的Gary真的是太強辣


2020.11.25

考場改了代碼忘了往文件夾里放,,,
光榮爆零
最長上升子序列可以用樹狀數組解決
樹狀數組記得離散化
暴力可以打表找規律
組合數的結論題往卡特蘭數上靠一下

2020.11.19

\(u1s1\)沒掛分舒服極了
但是改題的時候遇到一些磕磕絆絆
總結

ZYB玩字符串
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

inline int read(){
	int x = 0, w = 1;
	char ch = getchar();
	for(; ch > '9' || ch < '0'; ch = getchar()) if(ch == '-') w = -1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
	return x * w;
}

const int ss = 700;
const unsigned long long base = 233;
unsigned long long ha1[ss], ha2[ss], power[ss];

char ch[ss], cpy[ss], b[ss], ass[ss];
inline bool check(register char *a, register char *b){
	memcpy(ass, a, sizeof a);
	register int n = strlen(a + 1), len = strlen(b + 1);
	memset(ha2, 0, sizeof ha2);
	for(register int i = 1; i <= len; i++)
		ha2[i] = ha2[i - 1] * base + b[i];
	while(n){
		register bool flag = 0;
		for(register int l = 1; l + len - 1 <= n; l++){
			flag = 0;
			memset(ha1, 0, sizeof ha1);
			for(register int i = 1; i <= n; i++)
				ha1[i] = ha1[i - 1] * base + a[i];
			register int r = l + len - 1;
			register unsigned long long tmp = ha1[r] - ha1[l - 1] * power[r - l + 1];
			if(tmp == ha2[len]){
				flag = 1;
				register int cnt = 0;
				memset(ass, 0, sizeof ass);
				for(register int i = 1; i <= l - 1; i++)
					ass[++cnt] = a[i];
				for(register int i = r + 1; i <= n; i++)
					ass[++cnt] = a[i];
				n -= len;
				memcpy(a, ass, sizeof ass);
				break;
			}
		}
		if(!flag) break;
	}
	if(n) return 0;
	return 1;
}

signed main(){
	freopen("string.in", "r", stdin);
	freopen("string.out", "w", stdout);
	register int T = read();
	power[0] = 1;
	for(register int i = 1; i <= 605; i++)
		power[i] = power[i - 1] * base;
	while(T--){
		string ans1, ans2;
		scanf("%s", ch + 1);
		register int n = strlen(ch + 1);
		memcpy(cpy, ch, sizeof ch);
		register bool flag = 0;
		for(register int len = 1; len <= n; len++){
			if(flag) break;
			for(register int i = 1; i + len - 1 <= n; i++){
				if(flag) break;
				memcpy(ch, cpy, sizeof cpy);
				memset(b, 0, sizeof b);
				register int num = 0;
				for(register int j = i; j <= i + len - 1; j++)
					b[++num] = ch[j];
				if(check(ch, b)){
					flag = 1;
					ans1 = b + 1;
					break;
				}
			}
		}
		memcpy(ch, cpy, sizeof cpy);
		reverse(ch + 1, ch + 1 + n);
		memcpy(cpy, ch, sizeof ch);
		flag = 0;
		for(register int len = 1; len <= n; len++){
			if(flag) break;
			for(register int i = 1; i + len - 1 <= n; i++){
				if(flag) break;
				memcpy(ch, cpy, sizeof cpy);
				memset(b, 0, sizeof b);
				register int num = 0;
				for(register int j = i; j <= i + len - 1; j++)
					b[++num] = ch[j];
				if(check(ch, b)){
					flag = 1;
					ans2 = b + 1;
					break;
				}
			}
		}
		reverse(ans2.begin(), ans2.end());
		if(ans1.size() < ans2.size()) cout << ans1 << endl;
		else if(ans2.size() < ans1.size()) cout << ans2 << endl;
		else cout << min(ans1, ans2) << endl;
	}
}

注意事項

  • \(hash\)的時候,想要查詢某一個區間的字符或者數字\(ha[r] - ha[l - 1] * power[r - l + 1]\),思想類似差分
  • 同樣還是\(hash\),預處理\(power\)數組的時候,記得\(power[0] = 1\)
  • 不旦多測要清空,判斷字符串是否合法如果出現了修改原數組的情況,也要清空,或者另開一個新數組
  • \(string\)類型之間可以直接按照字典序排序,一個\(string\)也可以用\(reverse\)顛倒順序,像這樣\(reverse(ans.begin(), ans.end());\)

2020.10.26

眾所周知
\(1<<20=1048576\)
沒錯我就是無腦開了\(1e6\)

2020.10.21


\(150\to90\)
\(T2dfs\)沒寫出來
還是要練暴力

2020.10.20

晚上把會的分拿到了
沒有掛分++

多多少少比自己之前強了
嘿嘿
加油

發現自從開了這玩意就沒掛分了開心
雖然還是一如既往的爛

2020.10.18

\(T3\)理解錯題目了,狂敲\(4.0k\)
於是

導致沒時間打別的題了,快樂爆零

前言

這是一個棧
老規矩還是會從下往上更新
感覺開這個坑有點晚了
不過好在大部分出過的錯誤之前在博客里面都記錄過
回去翻翻還是有不錯的效果的
明天就第六階段了
希望不要再掛分了
把會的分數一定拿到
加油!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM