UPC2018组队训练赛第九场

题目来自2018广西省赛


 

A题:Welcome to Collegiate Programming Contest

 1 #include <iostream>
 2  
 3 using namespace std;
 4  
 5 int main()
 6 {
 7     int n;
 8     int t;
 9     cin>>t;
10     while(t--)
11     {
12         cin>>n;
13         for(int i=0;i<n;i++)
14         {
15             if(i)
16             {
17                 cout<<" ";
18             }
19             cout<<"AC";
20         }
21         cout<<endl;
22     }
23     return 0;
24 }
View Code

 

B题:Practice

 1 #include <iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 const int N=6;
 5 struct node{
 6 int time;
 7 int value;
 8 }op[N];
 9 bool cmp1(node a,node b)
10 {
11     if(a.time==b.time)
12     {
13         return a.value>b.value;
14     }
15     return a.time<b.time;
16 }
17 bool cmp2(node a,node b)
18 {
19     if(a.value==b.value)
20     {
21         return a.time<b.time;
22     }
23     return a.value>b.value;
24 }
25 int main()
26 {
27     int t;
28     scanf("%d",&t);
29     int n,m;
30     while(t--)
31     {
32         scanf("%d %d",&n,&m);
33         for(int i=1;i<=n;i++)
34         {
35             scanf("%d",&op[i].time);
36         }
37         for(int i=1;i<=n;i++)
38         {
39             scanf("%d",&op[i].value);
40         }
41         sort(op+1,op+1+n,cmp1);
42         int i=1,ans1=0,ans2=0,mm=m;
43         while(mm>=op[i].time)
44         {
45             ans1+=op[i].value;
46             mm-=op[i].time;
47             i++;
48         }
49         i=1;
50         mm=m;
51         sort(op+1,op+1+n,cmp2);
52         while(mm>=op[i].time)
53         {
54             ans2+=op[i].value;
55             mm-=op[i].time;
56             i++;
57         }
58         if(ans1==ans2)
59         {
60             printf("SAME\n");
61         }
62         else if(ans1>ans2)
63         {
64             printf("A\n");
65         }
66         else
67         {
68             printf("B\n");
69         }
70     }
71     return 0;
72 }
73  
View Code

 

C题:Team Match

 1 #include <iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 const int N=10;
 5 struct node
 6 {
 7     int x,y,z;
 8 };
 9 int a[2*N],vis[2*N];
10 int ans,n,m;
11 bool cmp(int x,int y)
12 {
13     return x>y;
14 }
15 int main()
16 {    int t;
17     scanf("%d",&t);
18     while(t--)
19     {
20         scanf("%d %d",&n,&m);
21         for(int i=1; i<=n; i++)
22         {
23             scanf("%d",&a[i]);
24         }
25         sort(a+1,a+1+n,cmp);
26 
27         ans=0;
28 
29         for(int i=1; i<=n; i++)
30         {
31             int x=-1,y=-1,z=-1;
32             for(int j=i+1; j<=n; j++)
33             {
34                 for(int k=j+1; k<=n; k++)
35                 {
36                     if(vis[i]==0&&vis[j]==0&&vis[k]==0)
37                     {
38                         if(a[i]*3+a[j]*2+a[k]>=m)
39                         {
40                             x=i;
41                             y=j;
42                             z=k;
43                         }
44                     }
45                 }
46             }
47             if(x==-1)
48             {
49                 break;
50             }
51             else
52             {
53                 ans++;
54                 vis[x]=1;
55                 vis[y]=1;
56                 vis[z]=1;
57             }
58         }
59         printf("%d\n",ans);
60         memset(vis,0,sizeof(vis));
61     }
62     return 0;
63 }
View Code

 

D题:Team Name

暴力就行了 

bfs枚举字母的每一种方式,然后再分别比较就行了。。。

 1 #include <bits/stdc++.h>
 2  
 3 using namespace std;
 4  
 5 int n;
 6 char a[105][35];
 7 char ans[105];
 8 bool flag;
 9 void dfs(int dep,int len)
10 {
11     if(len==dep)
12     {
13         ans[len++] = '\0';
14         for(int i=0;i<n;i++)
15             if(strstr(a[i],ans)) return;
16         flag = 1;
17         return;
18     }
19     for(int i=0;i<26;i++)
20     {
21         ans[dep] = i+'a';
22         dfs(dep+1,len);
23         if(flag) return;
24     }
25 }
26 int main()
27 {
28     int T;
29     cin>>T;
30     while(T--)
31     {
32         cin>>n;
33         for(int i=0;i<n;i++)
34         {
35             scanf("%s",a[i]);
36         }
37         flag = 0;
38         int len = 1;
39         while(!flag)
40         {
41             dfs(0,len);
42             len++;
43         }
44         printf("%s\n",ans);
45     }
46     return 0;
47 }
View Code

 

E题:Travel

 1 #include <iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4  
 5 int main()
 6 {
 7     int t,n;
 8     scanf("%d",&t);
 9     while(t--)
10     {
11         scanf("%d",&n);
12         if(n==2||n==3)
13         {
14             printf("1\n");
15             continue;
16         }
17         n-=2;
18         int ans=0,tmp;
19         if(n%2==0)
20         {
21             tmp=pow(2,n/2);
22             ans=max(ans,tmp);
23         }
24         else if(n%2==1)
25         {
26             tmp=pow(2,n/2-1);
27             ans=max(ans,tmp*3);
28         }
29         if(n%3==0)
30         {
31             tmp=pow(3,n/3);
32             ans=max(ans,tmp);
33         }
34         else if(n%3==1)
35         {
36             tmp=pow(3,n/3-1);
37             ans=max(ans,tmp*4);
38         }
39         else
40         {
41             tmp=pow(3,n/3);
42             ans=max(ans,tmp*2);
43         }
44         printf("%d\n",ans);
45     }
46     return 0;
47 }
View Code

 

F题:Stadium

 1 #include <iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 const int N=10;
 5 double a[N];
 6 bool cmp(double x,double y)
 7 {
 8     return x>y;
 9 }
10 bool check(double aa,double b,double c)
11 {
12     if(aa+b>c&&aa+c>b&&b+c>aa)
13     {
14         return true;
15     }
16     return false;
17 }
18 int main()
19 {
20     int t;
21     scanf("%d",&t);
22     while(t--)
23     {
24         for(int i=1;i<=4;i++)
25         {
26             scanf("%lf",&a[i]);
27         }
28         sort(a+1,a+5,cmp);
29         double ans=0;
30         for(int i=1;i<=3;i++)
31         {
32             for(int j=i+1;j<=4;j++)
33             {
34                 double aa,b,c;
35                 b=0;
36                 aa=a[i]-a[j];
37                 for(int k=1;k<=4;k++)
38                 {
39                     if(k!=i&&k!=j&&b==0)
40                     {
41                         b=a[k];
42                     }
43                     else if(k!=i&&k!=j&&b!=0)
44                     {
45                         c=a[k];
46                     }
47                 }
48                 if(check(aa,b,c))
49                 {
50                     double cos1=(b*b+c*c-aa*aa)/(2*b*c);
51                     double sin1=sqrt((1-cos1*cos1));
52                     double area=b*c*sin1;
53                     double h=area/aa;
54                     area/=2;
55                     area+=a[j]*h;
56                     ans=max(ans,area);
57                 }
58             }
59         }
60         if(ans==0)
61         {
62             printf("IMPOSSIBLE\n");
63             continue;
64         }
65         printf("%.2lf\n",ans);
66     }
67     return 0;
68 }
View Code

 

G题:GXBalloons

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 struct node
 4 {
 5     int x,y,pos;
 6 }mp[10005];
 7 bool cmp1(node a,node b)
 8 {
 9     return a.x<b.x;
10 }
11 bool cmp2(node a,node b)
12 {
13     return a.y<b.y;
14 }
15 int fa[10005];
16 int get(int x)
17 {
18     if(x==fa[x])return x;
19     return fa[x]=get(fa[x]);
20 }
21 void Union(int x,int y)
22 {
23     fa[get(x)]=get(y);
24 }
25 int main()
26 {
27     int t,n,k;
28     scanf("%d",&t);
29     while(t--)
30     {
31         scanf("%d%d",&n,&k);
32         for(int i=1;i<=n;i++)
33         {
34             scanf("%d%d",&mp[i].x,&mp[i].y);
35             mp[i].pos=i;
36         }
37         for(int i=1;i<=n;i++)
38         {
39             fa[i]=i;
40         }
41         sort(mp+1,mp+1+n,cmp1);
42         for(int i=2;i<=n;i++)
43         {
44             if(mp[i].x-mp[i-1].x<=k)
45             {
46                 Union(mp[i].pos,mp[i-1].pos);
47             }
48         }
49         sort(mp+1,mp+1+n,cmp2);
50         for(int i=2;i<=n;i++)
51         {
52             if(mp[i].y-mp[i-1].y<=k)
53             {
54                 if(get(mp[i].pos)!=get(mp[i-1].pos))
55                 {
56                     Union(mp[i].pos,mp[i-1].pos);
57                 }
58             }
59         }
60         int ans=0;
61         for(int i=1;i<=n;i++)
62         {
63 //            cout<<fa[i]<<" "<<get(mp[i].pos)<<endl;
64             if(i==fa[i])
65                 ans++;
66         }
67         printf("%d\n",ans);
68     }
69 //        cout << "Hello world!" << endl;
70     return 0;
71 }
View Code

 

H题:GXBoard

 1 #include <iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4  
 5 int main()
 6 {
 7     int t;
 8     int n;
 9     string s[105];
10     cin>>t;
11     while(t--)
12     {
13         cin>>n;
14         int ans=0;
15         for(int i=0;i<n;i++)
16         {
17             cin>>s[i];
18             ans+=s[i].size();
19         }
20         cout<<ans<<endl;
21     }
22     return 0;
23 }
View Code

 

I题:Rank LED

打表找规律

 1 #include <bits/stdc++.h>
 2  
 3 using namespace std;
 4  
 5 int a[10]={6,2,5,5,4,5,6,3,7,6};
 6  
 7 int main()
 8 {
 9 //    freopen("in.txt","r",stdin);
10 //    freopen("out.txt","w",stdout);
11     int T;
12     cin>>T;
13     while(T--)
14     {
15         int n;
16         cin>>n;
17         char s[105];
18         scanf("%s",s);
19         int cnt = 0;
20         for(int i=0;i<n;i++)
21             cnt+=a[s[i]-'0'];
22         int num7 = 0;
23         int flag = 0;
24         while(cnt>=14)
25         {
26             if(cnt==17)
27             {flag = 1;break;}
28             num7++;
29             cnt-=7;
30         }
31         string ans="";
32         if(flag)
33         {
34             ans+="200";
35             for(int i=0;i<num7;i++)
36                 ans+="8";
37             cout<<ans<<endl;
38             continue;
39         }
40  
41         if(cnt==2)
42             ans += "1";
43         else if(cnt==3)
44             ans+="7";
45         else if(cnt==4)
46             ans+="4";
47         else if(cnt==5)
48             ans+="2";
49         else if(cnt==6)
50             ans+="6";
51         else if(cnt==7)
52             ans+="8";
53         else if(cnt==8)
54             ans+="10";
55         else if(cnt==9)
56             ans+="18";
57         else if(cnt==10)
58             ans+="22";
59         else if(cnt==11)
60             ans+="20";
61         else if(cnt==12)
62             ans+="28";
63         else if(cnt==13)
64             ans+="68";
65         for(int i=0;i<num7;i++)
66         {
67             ans+="8";
68         }
69         cout<<ans<<endl;
70     }
71 }
View Code

 

J题:Pot

求所有数的gcd,然后乘以n

 1 #include <iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int t,n,x[200];
 5 int gcd(int a,int b)
 6 {
 7     return b?gcd(b,a%b):a;
 8 }
 9 int main()
10 {
11     cin>>t;
12     while(t--)
13     {
14         cin>>n;
15         int p=1;
16         for(int i=0;i<n;i++)
17         {
18             cin>>x[i];
19 //            p=gcd(p,x);
20         }
21         if(n==1)
22         {
23             cout<<x[0]<<endl;
24             continue;
25         }
26         p=gcd(x[0],x[1]);
27         for(int i=2;i<n;i++)
28             p=gcd(x[i],p);
29         int ans=p*n;
30         cout<<ans<<endl;
31     }
32     return 0;
33 }
View Code

 

转载于:https://www.cnblogs.com/scott527407973/p/9567405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值