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 }
这代码长度~汗~