1. 程式人生 > 其它 >賽後——2.14 寒假模擬10

賽後——2.14 寒假模擬10

T1正方形 T2玩蛇 T3嗷嗚 T4開車

\(\text{T1}\) 正方形

題意

\(S\) 有一個二維平面,上面有 \(n\) 個點。

現在,小 \(S\) 想用一個長和寬都平行於座標軸的正方形去覆蓋所有點,求正方形的最小面積。

思路

\(S=(\max(x_{\max}-x_{\min},y_{\max}-y_{\min}))^2\)

程式碼

點選檢視程式碼
int main(){
	n=read();
	maxx=maxy=-1,minx=miny=2000;
	for(int i=1;i<=n;i++){
		int x=read(),y=read();
		maxx=max(maxx,x),minx=min(minx,x);
		maxy=max(maxy,y),miny=min(miny,y);
	}
	int ans=max(maxx-minx,maxy-miny);
	printf("%d\n",ans*ans);
	return 0;
}

\(\text{T2}\) 玩蛇

題意

\(S\) 畫了一個高度為 \(n\) 的三角形,從上到下第 \(i\) 層的寬度為 \(i\)

接著小 \(S\) 將一個字串 \(T\) 蛇形的迴圈填入三角形,例如 \(n=6,T=\text{JANJETINA}\) 時,三角形為:

\(\text{J}\)
\(\text{NA}\)
\(\text{JET}\)
\(\text{JANI}\)
\(\text{ANJET}\)
\(\text{NAJANI}\)

現在有 \(Q\) 次詢問,每次詢問要去第 \(k\) 行字元 \(c\) 出現了多少次?

思路

賽時瞎搞用分塊優化瘋狂掛分。

首先我們發現這東西可以取模然後把左右的零散串暴力算出來,發現 \(|S|\le 10^6\),因此需要字首和。

做完了,賽時真是智障。

程式碼

點選檢視程式碼
int main(){
	n=read();
	scanf("%s",s+1);
	len=strlen(s+1);
	for(int i=1;i<=len;i++){
		for(int j=1;j<=26;j++){
			sum[i][j]=sum[i-1][j];
		}
		sum[i][s[i]-'A'+1]++;
	}
	q=read();
	while(q--){
		ll k=read(),ans=0;
		char c;
		cin>>c;
		ll l,r;
		if(k&1) l=(((k-1)/2%len)*(k%len)+1)%len;
		else l=(((k/2)%len)*((k-1)%len)+1)%len;
		r=(l+k-1)%len;
		if(!l) l=len;
		if(!r) r=len;
		if(l<r&&k<=len) ans=sum[r][c-'A'+1]-sum[l-1][c-'A'+1];
		else{
			ll num=k-(len-l+1)-r;
			ans=(num/len)*sum[len][c-'A'+1];
			ans+=sum[r][c-'A'+1]+sum[len][c-'A'+1]-sum[l-1][c-'A'+1];
		}
		printf("%lld\n",ans);
	}
	return 0;
}

\(\text{T3}\) 嗷嗚

題意

思路

程式碼

\(\text{T4}\) 開車

題意

思路

程式碼