• 17-05-27模拟赛


    T1:读入后按身高排序,枚举每个点可以与之相邻的身高的区间,dfs统计答案。

    Code:

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 int n,k,cur,ans;
     8 int a[11],pmx[11],pmn[11];
     9 bool vis[11];
    10 void dfs(int x,int step){
    11     if (step==n) {if (abs(cur-a[x])<=k) ++ans; return;}
    12     vis[x]=1;
    13     for (int i=pmn[x];i<=pmx[x];++i) if (!vis[i])dfs(i,step+1);
    14     vis[x]=0;
    15 }
    16 int main()
    17 {
    18     scanf("%d%d",&n,&k);
    19     for (int i=1;i<=n;++i) scanf("%d",&a[i]);
    20     sort(a+1,a+n+1);
    21     for (int i=1;i<=n;++i){
    22         pmx[i]=pmn[i]=i;
    23         while (pmx[i]<n&&a[pmx[i]+1]-a[i]<=k) pmx[i]++;
    24         while (pmn[i]>1&&a[i]-a[pmn[i]-1]<=k) pmn[i]--;
    25     }
    26     for (int i=1;i<=n;++i) {cur=a[i];dfs(i,1);}
    27     printf("%d",ans/n);
    28     return 0;
    29 }

    T2:二分答案,前缀和计算出每次拿的薪水,若大于二分的答案,则标记前一天。若被标记的天数(包括最后一天)大于领取的机会数,则return 0,反之return 1.

    Code:

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<algorithm>
     7 #define MN 100005
     8 using namespace std;
     9 int sum[MN],a[MN];
    10 int n,m,l,r,ans=0;
    11 bool check (int x){
    12     int cur=0,t=0;
    13     for (int i=0;i<n;++i){
    14         if (a[i+1]>x||t>=m) return 0;
    15         if (sum[i+1]-sum[cur]>x) cur=i,t++;    
    16     }
    17     return t<m;
    18 }
    19 int main()
    20 {
    21     scanf("%d%d",&n,&m);sum[0]=0;
    22     for (int i=1;i<=n;++i) scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
    23     l=0;r=sum[n];
    24     while (l<=r){
    25         int mid=(l+r)>>1;
    26         if (check(mid)) ans=mid,r=mid-1;else l=mid+1;
    27     }printf("%d",ans);
    28     return 0;
    29 }

    T3:

    令in[i]为到达i点的总方案数,out[i]为从i出发到达n点的方案数,则通过边(u,v)的方案数为in[u]*out[v],故搜索每一条边,找到该值的最大值即可。

    st[i]表示该点是否有入边。

    Code:

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<algorithm>
     7 #define ME 50005
     8 #define MN 5005
     9 using namespace std;
    10 struct ed{
    11     int x,y;
    12 }a[ME];
    13 struct edge{
    14     int to,next;
    15 }e[ME<<1];
    16 int r[MN],h[MN],num[MN],in[MN],out[MN];
    17 bool rvis[MN],vis[MN],st[MN];
    18 int n,m,x,y,cnt=1;
    19 void ins(int *head,int x,int y){
    20     e[++cnt].to=y;e[cnt].next=head[x];head[x]=cnt;
    21 }
    22 int main()
    23 {
    24     scanf("%d%d",&n,&m);memset(st,0,sizeof(st));
    25     for (int i=1;i<=m;++i){
    26         scanf("%d%d",&a[i].x,&a[i].y);st[a[i].y]=1;
    27         ins(h,a[i].x,a[i].y),ins(r,a[i].y,a[i].x);
    28     }
    29     for (int i=1;i<=n;++i){
    30         in[i]=st[i]?0:1;
    31         for (int j=r[i];j;j=e[j].next) in[i]+=in[e[j].to];
    32     }out[n]=1;
    33     for (int i=n;i;--i){
    34         for (int j=h[i];j;j=e[j].next) out[i]+=out[e[j].to];
    35     }int mx=0;
    36     for (int i=1;i<=m;++i) mx=max(in[a[i].x]*out[a[i].y],mx);
    37     printf("%d",mx);return 0;
    38 }
  • 相关阅读:
    页面切换语言包使用session不用cookie
    如何设置unobtrusive的语言包
    .net MVC全球化资源使用心得
    消息队列写入内容后,读出来的自动包裹了<string>标签,自定义格式化器解决该issue
    解决"415 Cannot process the message because the content type 'application/x-www-form-urlencoded' was not the expected type 'text/xml; charset=utf-8'"
    动态sql语句输出参数
    vue数据更改视图不更新问题----深入响应式原理
    实现 页面某些 效果
    自己封装 vue 组件 和 插件
    单页面应用的 打包部署(vue-cli、creat-react-app )
  • 原文地址:https://www.cnblogs.com/codingutopia/p/test170527.html
Copyright © 2020-2023  润新知