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\n");
23         else            printf("%d\n",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\n",ans);
62     }
63 }
View Code

猜你喜欢

转载自www.cnblogs.com/scott527407973/p/9582786.html
今日推荐