AtCoder Beginner Contest 071

第二次打日服。。。

感觉比较水。因为聚会的原因,还几十分钟结束的时候才打开电脑。

D题就没看。难度不知。

题目链接http://abc071.contest.atcoder.jp/

ABC都水题。

C题因为数据比较大,不知道为什么用long long 有点问题,赛后发现是x,y用的是int 相乘会溢出了。比赛的时候用的是大数乘法。

A题代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<string.h>
 5 #include<math.h>
 6 using namespace std;
 7 int main(){
 8     int a,b,x;
 9     while(~scanf("%d%d%d",&x,&a,&b)){
10         int alen=abs(a-x);
11         int blen=abs(b-x);
12         if(alen>blen)cout<<'B'<<endl;
13         else cout<<'A'<<endl;
14     }
15     return 0;
16 }

B题代码:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
int flag[30];
int main(){
    char s[100500];
    cin>>s;
    memset(flag,0,sizeof(flag));
    for(int i=0;i<strlen(s);i++){
        flag[s[i]-'a']++;
    }
    int cnt=0;
    for(int i=0;i<26;i++){
        if(flag[i]==0){
            cout<<(char)(i+'a')<<endl;
            cnt++;
            break;
        }
    }
    if(!cnt) cout<<"None"<<endl;
    return 0;
}

C题代码:

 1 /*
 2 改后的代码
 3 */
 4 #include<iostream>
 5 #include<stdio.h>
 6 #include<string.h>
 7 #include<algorithm>
 8 using namespace std;
 9 long long int  a[100500];
10 int flag[100500];
11 bool cmp(int a,int b){
12     return a>b;
13 }
14 int main(){
15     int n;
16     cin>>n;
17     for(int i=0;i<n;i++){
18         scanf("%d",a+i);
19     }
20     memset(flag,0,sizeof(flag));
21     sort(a,a+n,cmp);
22     long long int  x,y;
23     x=y=0;
24     int fg=0;
25     for(int i=0;i<n-1;i++){
26         if(a[i]==a[i+1]&&!flag[i]){
27             if(!x) x=a[i];
28             else{
29                 y=a[i];
30                 break;
31             }
32             flag[i]=1;
33             flag[i+1]=1;
34         }
35     }
36     long long int  sum;
37     sum=x*y;
38     cout<<sum<<endl;
39     return 0;
40 }

 

 1 /*
 2 大数乘法代码
 3 */
 4 #include<iostream>
 5 #include<stdio.h>
 6 #include<string.h>
 7 #include<algorithm>
 8 using namespace std;
 9 int a[100500];
10 int flag[100500];
11 bool cmp(int a,int b){
12     return a>b;
13 }
14 string sum(string s1,string s2)
15 {
16     if(s1.length()<s2.length())
17     {
18         string temp=s1;
19         s1=s2;
20         s2=temp;
21     }
22     int i,j;
23     for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
24     {
25         s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));   //注意细节
26         if(s1[i]-'0'>=10)
27         {
28             s1[i]=char((s1[i]-'0')%10+'0');
29             if(i) s1[i-1]++;
30             else s1='1'+s1;
31         }
32     }
33     return s1;
34 }
35 string Mult(string s,int x)
36 {
37     reverse(s.begin(),s.end());
38     int cmp=0;
39     for(int i=0;i<s.size();i++)
40     {
41         cmp=(s[i]-'0')*x+cmp;
42         s[i]=(cmp%10+'0');
43         cmp/=10;
44     }
45     while(cmp)
46     {
47         s+=(cmp%10+'0');
48         cmp/=10;
49     }
50     reverse(s.begin(),s.end());
51     return s;
52 }
53 string Multfa(string x,string y)  //大数乘法
54 {
55     string ans;
56     for(int i=y.size()-1,j=0;i>=0;i--,j++)
57     {
58         string tmp=Mult(x,y[i]-'0');
59         for(int k=0;k<j;k++)
60             tmp+='0';
61         ans=sum(ans,tmp);
62     }
63     return ans;
64 }
65 int main(){
66     int n;
67     cin>>n;
68     for(int i=0;i<n;i++){
69         scanf("%d",a+i);
70     }
71     memset(flag,0,sizeof(flag));
72     sort(a,a+n,cmp);
73     int x,y;
74     x=y=0;
75     int fg=0;
76     for(int i=0;i<n-1;i++){
77         if(a[i]==a[i+1]&&!flag[i]){
78             if(!x) x=a[i];
79             else{
80                 y=a[i];
81                 break;
82             }
83             flag[i]=1;
84             flag[i+1]=1;
85         }
86     }
87     char x1[15],y1[15];
88     sprintf(x1,"%d",x);
89     sprintf(y1,"%d",y);
90     string s=Multfa(x1,y1);
91     cout<<s<<endl;
92     return 0;
93 }

这代码长度~汗~

 

posted @ 2017-08-20 21:58  ISGuXing  阅读(171)  评论(0编辑  收藏  举报