2020.4.6 UCF Local Programming Contest 2017 解题+补题报告

A Electric Bill

 1.题意

  计算电费,1000kwh及以下一档收费a,以上为一档收费b。

 

 2.题解

  if-else判断。

 3.代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a,b,t;
 4 int main(){
 5     cin>>a>>b>>t;
 6     for(int i=1;i<=t;i++){
 7         int x,ans=0;
 8         cin>>x;
 9         if(x<=1000)
10             ans=x*a;
11         else
12             ans=(x-1000)*b+1000*a;
13         cout<<x<<' '<<ans<<endl;
14     }
15    
16     return 0;
17 }

 

B Simplified Keyboard

 1.题意

  给定一张字母分布图,判断两单词之间的属性。若两单词完全相同,则为属性1,若两单词长度相同,对应字母相同或相邻,则为属性2,否则为属性3。

 2.题解

  用map存邻近关系,然后判断即可。

 3.代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     map<char,string> mp;
 5     mp['a']="bkj";
 6     mp['b']="clkja";
 7     mp['c']="dmlkb";
 8     mp['d']="enmlc";
 9     mp['e']="fonmd";
10     mp['f']="gpone";
11     mp['g']="hqpof";
12     mp['h']="irqpg";
13     mp['i']="rqh";
14     mp['j']="abkts";
15     mp['k']="abclutsj";
16     mp['l']="bcdmvutk";
17     mp['m']="cdenwvul";
18     mp['n']="defoxwvm";
19     mp['o']="efgpyxwn";
20     mp['p']="fghqzyxo";
21     mp['q']="ghirzyp";
22     mp['r']="hizq";
23     mp['s']="jkt";
24     mp['t']="jklus";
25     mp['u']="klmvt";
26     mp['v']="lmnwu";
27     mp['w']="mnoxv";
28     mp['x']="nopyw";
29     mp['y']="opqzx";
30     mp['z']="pqry";
31     
32     int t,flag,flag1;
33     string a,b;
34     cin>>t;
35     while(t--){
36         flag=0,flag1=0;
37         cin>>a>>b;
38         if(a.size()!=b.size()){
39             cout<<"3"<<endl;
40             continue;
41         }
42         for(int i=0;i<a.size();i++){
43             if(a[i]!=b[i]){
44                 flag=1;
45                 break;
46             }
47         }
48         if(flag==0){
49             cout<<"1"<<endl;
50             continue;
51         }
52         else{
53             for(int i=0;i<a.size();i++){
54                 flag1=0;
55                 if(a[i]==b[i]){
56                     flag1=1;
57                     continue;
58                 }
59                 if(a[i]!=b[i]){
60                     for(int j=0;j<mp[a[i]].size();j++){
61                         if(mp[a[i]][j]==b[i]){
62                             flag1=1;
63                             break;
64                         }
65                     }
66                 }
67                 if(flag1==0){
68                     break;
69                 }
70             }
71             if(flag1==1){
72                 cout<<"2"<<endl;
73             }
74             else{
75                 cout<<"3"<<endl; 
76             }    
77         }
78     }
79     return 0;
80 }

 

C Singin' in the Rain

 1.题意

  给定一张专辑,女儿喜欢其中的k首,当一首歌播放结束时,按后退一次则再次播放这首歌,按两次则播放上首歌,按一次前进则播放下首歌的下一首,专辑的最后一首播放完将跳到第一首。给定女儿喜欢的歌的序号列表,问最少要按多少次按钮。

 2.题解

  模拟。从一首歌到另一首歌,要么往前按,要么往后按,取较小值。

 3.代码

 1 #include<bits/stdc++.h>
 2 #define ll long long 
 3 using namespace std;
 4 ll t,n,k,ans;
 5 int main(){
 6     cin>>t;
 7     while(t--){
 8         cin>>n>>k;
 9         ans=0;
10         ll a,b;
11         cin>>a;
12         for(ll i=1;i<k;i++){
13             cin>>b;    
14             if(a==b)
15                 ans+=1;
16             else if(a<b)
17                 ans+=min(b-a-1,n-b+1+a);    
18             else
19                 ans+=min(a-b+1,n-a-1+b);
20             a=b;
21         }
22         cout<<ans<<endl;
23     }
24 
25     return 0;
26 }

 

猜你喜欢

转载自www.cnblogs.com/lvguapi/p/12652408.html