• UPC2018组队训练赛第十场


    题目来自ICPC 2017 Japan Domestic


    A题:Taro's Shopping

    直接按照题意写

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 bool cmp(int x,int y)
     5 {
     6     return x>y;
     7 }
     8 int n,m,a[1005];
     9 int main()
    10 {
    11     while(1)
    12     {
    13         scanf("%d%d",&n,&m);
    14         if(n==0&&m==0)  return 0;
    15         for(int i=0;i<n;i++)    scanf("%d",&a[i]);
    16         sort(a,a+n,cmp);
    17         int ans=-1;
    18         for(int i=0;i<n;i++)
    19             for(int j=i+1;j<n;j++)
    20                 if(a[i]+a[j]<=m)
    21                     ans=max(ans,a[i]+a[j]);
    22         if(ans==-1)     printf("NONE
    ");
    23         else            printf("%d
    ",ans);
    24     }
    25     return 0;
    26 }
    View Code

     

    B题:Almost Identical Programs

    输入的两个字符串相同输出“IDENTICAL”,如果只有一个双引号里面的字符串不同,输出“CLOSE”,其他的输出“DIFFERENT”

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 string s1,s2;
     5 int main()
     6 {
     7     while(cin>>s1)
     8     {
     9         if(s1==".")     return 0;
    10         cin>>s2;
    11         if(s1==s2)    {cout<<"IDENTICAL"<<endl;continue;}
    12         string a1[200]={""},b1[200]={""},a2[200]={""},b2[200]={""};
    13         string tmp1="",tmp2="";
    14         int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
    15         for(int i=0;i<s1.size();i++)
    16         {
    17             if(s1[i]!='"')  {tmp1+=s1[i];continue;}
    18             if(tmp1!="")    a1[cnt1++]=tmp1;
    19             tmp1="";
    20             i++;
    21             while(s1[i]!='"')
    22             {
    23                 tmp2+=s1[i];
    24                 i++;
    25             }
    26             b1[cnt2++]=tmp2;
    27             tmp2="";
    28         }
    29         if(tmp1!="")    a1[cnt1++]=tmp1;
    30         tmp1="";
    31          for(int i=0;i<s2.size();i++)
    32         {
    33             if(s2[i]!='"'){tmp1+=s2[i];continue;}
    34             if(tmp1!="")    a2[cnt3++]=tmp1;
    35             tmp1="";
    36             i++;
    37             while(s2[i]!='"')
    38             {
    39                 tmp2+=s2[i];
    40                 i++;
    41             }
    42             b2[cnt4++]=tmp2;
    43             tmp2="";
    44         }
    45         if(tmp1!="")    a2[cnt3++]=tmp1;
    46         int flag1=0,flag2=0;
    47         if(cnt1==cnt3)
    48         {
    49             for(int i=0;i<cnt1;i++)
    50             {
    51                 if(a1[i]!=a2[i])
    52                 {
    53                     flag1=1;
    54                     break;
    55                 }
    56             }
    57         }
    58         else    flag1=1;
    59         if(cnt2==cnt4)
    60         {
    61             int cnt=0;
    62             for(int i=0;i<cnt2;i++)
    63             {
    64                 if(b1[i]!=b2[i])    cnt++;
    65             }
    66             if(cnt>=2)  flag2=1;
    67         }
    68         else    flag2=1;
    69         if(!flag1&&!flag2)  cout<<"CLOSE"<<endl;
    70         else    cout<<"DIFFERENT"<<endl;
    71     }
    72     return 0;
    73 }
    View Code

    C题:A Garden with Ponds

    建水池,要求四周的高度最小值必须严格大于水池内部的高度,然后求水池最多能装多少水。

    暴力枚举水池

     1 #include <bits/stdc++.h>
     2  
     3 using namespace std;
     4  
     5 int Map[15][15];
     6 int n,m;
     7  
     8 int cal(int nn,int mm,int k,int p)
     9 {
    10     int Min = 100;
    11     for(int  i=k;i<k+nn;i++)
    12     {
    13         Min = min(Map[i][p],Min);
    14         Min = min(Map[i][p+mm-1],Min);
    15     }
    16     for(int i=p;i<p+mm;i++)
    17     {
    18         Min = min(Map[k][i],Min);
    19         Min = min(Map[k+nn-1][i],Min);
    20     }
    21     int anst = 0;
    22     for(int i=k+1;i<k+nn-1;i++)
    23     {
    24         for(int j=p+1;j<p+mm-1;j++)
    25         {
    26             if(Map[i][j]>=Min)
    27                 return 0;
    28             anst+=(Min-Map[i][j]);
    29         }
    30     }
    31     return anst;
    32 }
    33  
    34 int main()
    35 {
    36  
    37     while(scanf("%d%d",&n,&m))
    38     {
    39         if(n==0&&m==0)
    40             break;
    41         for(int i=1;i<=n;i++)
    42             for(int j=1;j<=m;j++)
    43                 scanf("%d",&Map[i][j]);//>>Map[i][j];
    44  
    45         int ans = 0;
    46  
    47         for(int i=3;i<=n;i++)
    48         {
    49             for(int j=3;j<=m;j++)
    50             {
    51                 for(int k=1;i+k-1<=n;k++)
    52                 {
    53                     for(int p=1;p+j-1<=m;p++)
    54                     {
    55                         ans = max(ans,cal(i,j,k,p));
    56                         //cout<<cal(i,j,k,p)<<endl;
    57                     }
    58                 }
    59             }
    60         }
    61         printf("%d
    ",ans);
    62     }
    63 }
    View Code
    如有错误,请指正,感谢!
  • 相关阅读:
    归一化和标准化的作用
    区间问题-扫描线-前缀和-有序区间判重-1897. 会议室 3
    动态规划-数位dp-233. 数字 1 的个数
    动态规划-状态压缩-三状态-5383. 给 N x 3 网格图涂色的方案数
    动态规划-887. 鸡蛋掉落
    递归-约瑟夫环
    树的重心
    针孔相机模型
    图像分割学习笔记2
    图像分割学习笔记1
  • 原文地址:https://www.cnblogs.com/scott527407973/p/9582786.html
Copyright © 2020-2023  润新知