賽後——2.14 寒假模擬10
阿新 • • 發佈:2022-02-14
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; }