10.3 CSP B组模拟赛

匿名 (未验证) 提交于 2019-12-03 00:13:02

写在前面:

  至于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; }
T1 Code

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; }
T1 Code

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; }
T3 Code


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!