社区讨论
为什么O(n^3)可以过n<=1000的点
P15361「WYZOI R2」拜年参与者 7已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mlpyb416
- 此快照首次捕获于
- 2026/02/17 09:55 前天
- 此快照最后确认于
- 2026/02/17 21:56 前天
这是我的代码
CPP#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
const int M = 1e3 + 10;
int n,a[10][N],v[10][N],m[M][M],t,ans;
int dx[]={0,1,-1,0,0},dy[]={0,0,0,1,-1};
void dfs(int x,int y,int l,int r){
v[x][y]=1;
for(int i = 1; i <= 4; i++){
int qx=x+dx[i],qy=y+dy[i];
if(1<=qx&&qx<=2&&1<=qy&&qy<=n&&a[qx][qy]>=l&&a[qx][qy]<=r&&!v[qx][qy]){
dfs(qx,qy,l,r);
}
}
}
void solve(){
cin >> n;int flg=1;
for(int i = 1; i <= 2; i++){
for(int j = 1; j <= n; j++){
cin >> a[i][j];
if(a[i][j]!=a[1][1])flg=0;
}
}
if(flg){
cout << a[1][1]*(2*n-a[1][1]+1) << endl;
return;
}
ans=0;
for(int i = 1; i <= 2*n; i++){
for(int j = i; j <= 2*n; j++){
if(a[1][1]<i||a[1][1]>j)continue;
for(int k = 1; k <= n; k++)v[1][k]=v[2][k]=0;
dfs(1,1,i,j);if(v[2][n])ans++;
}
}
cout << ans << endl;
}
int main(){
cin >> t;
while(t--)solve();
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...