• 来自一次考试(2019.4.21)


    这是一道考试题。。。。。。

    这篇博客只是用来存代码的。。。

    T1

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 template<typename type_>
     5 void scan(type_ &x){
     6     type_ f=1;x=0;char s=getchar();
     7     while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
     8     while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
     9     x*=f;
    10 }
    11 ll a[200007],m,n,q,s,t,sum[200007];
    12 
    13 //void da(ll x,ll y){
    14 //    m[x]=m[x-1]-s*y;
    15 //    return ;
    16 //}
    17 //void xi(ll x,ll y){
    18 //    m[x]=m[x-1]+t*y;
    19 //    return ;
    20 //}
    21 //void xg(ll l,ll r,ll k){
    22 //    for(int i=l;i<=r;i++){
    23 //        a[i]+=k;
    24 //    }
    25 //    for(int i=1;i<=n;i++){
    26 //        if(a[i]>a[i-1]){
    27 //            da(i,a[i]-a[i-1]);
    28 //        }else{
    29 //            xi(i,a[i-1]-a[i]);
    30 //        }
    31 //    }
    32 //    printf("%d
    ",m[n]);
    33 //    for(int i=l;i<=r;i++){
    34 //        a[i]-=k;
    35 //    }
    36 //    memset(m,0,sizeof(m));
    37 ////    cout<<"a=";
    38 ////    for(int i=1;i<=n;i++){
    39 ////        printf("%d ",a[i]);
    40 ////    }
    41 ////    cout<<"m= ";
    42 ////    for(int i=1;i<=n;i++){
    43 ////        printf("%d ",m[i]);
    44 ////    }
    45 ////    printf("
    ");
    46 ////    printf("%lld
    ",m[n]);
    47 //}
    48 
    49 
    50 int main(){
    51     freopen("365.in","r",stdin);
    52     freopen("365.out","w",stdout);
    53     scan(n);scan(q);scan(s);scan(t);
    54     for(int i=0;i<=n;i++){
    55         scan(a[i]);
    56         if(i==0)continue;
    57         if(a[i]>a[i-1]){
    58             sum[i]=-1*(s*(a[i]-a[i-1]));
    59         }else{
    60             sum[i]=t*(a[i-1]-a[i]);
    61         }
    62 //        scanf("%lld",&a[i]);
    63     }
    64     for(int i=1;i<=n;i++){
    65         m+=sum[i];
    66 //        sum1[i]=sum[i];
    67     }
    68     for(int j=1;j<=q;j++){
    69         ll lll,rr,kk,ans1=0,ans2=0;
    70         scan(lll);scan(rr);scan(kk);
    71 //        scanf("%lld%lld%lld",&lll,&rr,&kk);
    72 //        if(rr==n)continue;
    73         if(a[lll]+kk>a[lll-1]){
    74             ans1=sum[lll]-(-1*s*(a[lll]+kk-a[lll-1]));
    75         }else{
    76             ans1=sum[lll]-(t*(a[lll-1]-a[lll]-kk));
    77         }
    78         if(a[rr+1]>a[rr]+kk){
    79             ans2=sum[rr+1]-(-1*s*(a[rr+1]-a[rr]-kk));
    80         }else{
    81             ans2=sum[rr+1]-t*(a[rr]-a[rr+1]+kk);
    82         }
    83         if(rr==n)ans2=0;
    84         printf("%lld
    ",m-ans1-ans2);
    85     }
    86     return 0;
    87 }

    T3

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 //#define ll long long
     4 template<typename type>
     5 void scan(type &x){
     6     type f=1;x=0;char s=getchar();
     7     while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
     8     while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
     9     x*=f;
    10 }
    11 int n,m,a[2007][2007];
    12 int gmax,gmin;
    13 int check(int ch){
    14     int ss=0;
    15     for(int i=0;i<n;i++){
    16         for(int j=0;j<m;j++){
    17             if(a[i][j]<gmax-ch){
    18                 ss=max(ss,j+1);//求出有最大值的图的边界 
    19             }
    20         }
    21         for(int j=0;j<m;j++){
    22             if(a[i][j]>ch+gmin){
    23                 if(j<ss)return 0;//判断最大值与最小值的图的边界是否冲突
    24                 //即判断图是否联通 
    25             }
    26         }
    27     }
    28     return 1;//题目条件判断 
    29 }
    30 int erfen(){
    31     int l=0,r=gmax-gmin;
    32     while(l<r){
    33         int mid=(l+r)/2;
    34         if(check(mid)){//如果这个值不满足条件 
    35             r=mid;//更新 
    36         }else{
    37             l=mid+1;
    38         }
    39     }
    40     return l;//返回最小值 
    41 }
    42 
    43 
    44 int main(){
    45     freopen("paint.in", "r", stdin);
    46     freopen("paint.out", "w", stdout);
    47     scan(n);scan(m);
    48     for(int i=0;i<n;i++){
    49         for(int j=0;j<m;j++){
    50             scan(a[i][j]);
    51         }
    52     }
    53 
    54     gmax=gmin=a[0][0];
    55     for(int i=0;i<n;i++){
    56         for(int j=0;j<m;j++){
    57             gmax=max(gmax,a[i][j]);
    58             gmin=min(gmin,a[i][j]);//求出全图最大值 
    59         }
    60     } 
    61     int ans;
    62     ans=erfen();//求出原图的最小答案 
    63     for(int i=0;i<n/2;i++){
    64         for(int j=0;j<m;j++){
    65             swap(a[i][j],a[n-i-1][j]);
    66         }//将图左右对称,即将出发点放到右上角。 
    67     }
    68     ans=min(ans,erfen());
    69     for(int i=0;i<n;i++){
    70         for(int j=0;j<m/2;j++){
    71             swap(a[i][j],a[i][m-j-1]);
    72         }//将图上下对称,即将出发点放到右下角。 
    73     }
    74     ans=min(ans,erfen());
    75     for(int i=0;i<n/2;i++){
    76         for(int j=0;j<m;j++){
    77             swap(a[i][j],a[n-i-1][j]);
    78         }//再次左右对称,将出发点放到左下角。 
    79     }
    80     ans=min(ans,erfen());
    81     printf("%d
    ",ans);
    82     return 0;
    83 }

     

  • 相关阅读:
    PDOStatement::closeCursor
    PDOStatement::bindValue
    oracle drop table recyclebin恢复
    mysql基准测试工具tpcc-mysql安装、使用、结果解读
    MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及的几个字符集
    [MySQL FAQ]系列 — EXPLAIN结果中哪些信息要引起关注
    [MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
    数据库专业词语
    老叶观点:MySQL开发规范之我见
    [MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
  • 原文地址:https://www.cnblogs.com/xishirujin/p/10757791.html
Copyright © 2020-2023  润新知