写在前面:
至于10.3号的模拟为什么今天写。。。。这种事情不是很显而易见嘛。
我可是养鸽大户QAQ
其实这两天的题都还好,不算难。
T1 长方形
考试考结论以及数学对我来说最不友好了啊QAQ
shabi
数学菜鸡跟着题解改了小一个小时QAQ


#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n,m,k,ans=0; int ad(int x,int y,int i) { return x*(x-1)/2*i*(i-1)/2+y*(y-1)/2*x; } int main() { scanf("%d%d%d",&n,&m,&k); for(int i=2;i<=m;i++) { int x=k/i,y=k%i; if(x>n) continue; if(x==n&&y) continue; ans=max(ans,ad(x,y,i)); } for(int i=2;i<=n;i++) { int x=k/i,y=k%i; if(x>m) continue; if(x==m&&y) continue; ans=max(ans,ad(x,y,i)); } cout<<ans<<endl;; return 0; }
Alicelr
代码来啦


#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n,m,k; struct ss{ int l,r; }d[100007]; int a[510],fa[10007][510],ba[10007][510]; int fi_fa(int id,int x) { if(fa[id][x]==x) return x; return fa[id][x]=fi_fa(id,fa[id][x]); } int fi_ba(int id,int x) { if(ba[id][x]==x) return x; return ba[id][x]=fi_ba(id,ba[id][x]); } int fi_a(int x) { if(a[x]==x) return x; return a[x]=fi_a(a[x]); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d%d",&d[i].l,&d[i].r); for(int i=1;i<=n;i++) { fa[0][i]=i; ba[m+1][i]=i; } for(int i=1;i<=m;i++) { memcpy(fa[i],fa[i-1],sizeof fa[i]); int col_x=fi_fa(i,d[i].l); int col_y=fi_fa(i,d[i].r); if(col_x!=col_y) fa[i][col_x]=col_y; } for(int i=m;i>=1;i--) { memcpy(ba[i],ba[i+1],sizeof ba[i]); int col_x=fi_ba(i,d[i].l); int col_y=fi_ba(i,d[i].r); if(col_x!=col_y) ba[i][col_x]=col_y; } scanf("%d",&k); while(k--) { int l,r; scanf("%d%d",&l,&r); memcpy(a,fa[l-1],sizeof a); for(int i=1;i<=n;i++) { int col_x=fi_a(a[i]); int col_y=fi_a(ba[r+1][i]); if(col_x!=col_y) a[col_x]=col_y; } int ans=0; for(int i=1;i<=n;i++) if(a[i]==i) ans++; cout<<ans<<endl; } return 0; }
T3 灞卞嘲
hd-h-d


#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> using namespace std; int dx[5]={0,0,1,0,-1}; int dy[5]={0,1,0,-1,0}; int n,m,d,tim,maxn; int mp[507][507],vis[507][507]; bool flag; struct node{ int x,y; }; void bfs(int x,int y) { queue<node> q; q.push((node){x,y}); int high=mp[x][y]-d; vis[x][y]=++tim; while(!q.empty()) { node nw=q.front(); q.pop(); for(int i=1;i<=4;i++) { int nwx=nw.x+dx[i]; int nwy=nw.y+dy[i]; if(nwx<1||nwx>n||nwy<1||nwy>m) continue; if(mp[nwx][nwy]<=high||vis[nwx][nwy]==tim) continue; if(mp[nwx][nwy]>mp[x][y]) { flag=1; return; } vis[nwx][nwy]=tim; q.push((node){nwx,nwy}); } } return; } int main() { scanf("%d%d%d",&n,&m,&d); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&mp[i][j]); maxn=max(maxn,mp[i][j]); } } int ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(mp[i][j]==maxn) continue; bfs(i,j); if(flag) { ans++; flag=0; } } } cout<<n*m-ans<<endl; return 0; }
来源:博客园
作者:
链接:https://www.cnblogs.com/qxyzili--24/p/11624266.html