ACM培训练习总结 2

这次题目不难,就是最后一道题感觉表述不大清楚,对一个名字中数字的处理讲的不是很清楚,所以不做了。。

这次所有题交之前都没进行测试。。错了好多次。。

第一题,水题。

Ac代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=100010;
int a[maxn];
int main(){
int n,first=1;
while(cin>>n){
memset(a,0,sizeof(a));
int first2=1;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
if(first) first=0;
else cout<<endl;
for(int i=0;i<n/2;i++){
if(first2) first2=0;
else cout<<" ";
if(i!=n-1-i) cout<<a[i]<<" "<<a[n-1-i];
else break;
}
if(n%2==1){
if(first2) first2=0;
else cout<<" ";
cout<<a[n/2];
}
cout<<endl;
}
return 0;
}

第二题,还是水题。

Ac代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=100010;
int a[maxn];
int main(){
int n,first=1;
while(cin>>n){
int cnt1=0,cnt2=0;
memset(a,0,sizeof(a));
int first2=1;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
if(first) first=0;
else cout<<endl;
if(n%2==1){
for(int i=0;cnt1<n/2+1;i+=2){
if(first2) first2=0;
else cout<<" ";
cout<<a[i];
cnt1++;
}
for(int i=1;cnt2<n/2;i+=2){
if(first2) first2=0;
else cout<<" ";
cout<<a[n-1-i];
cnt2++;
}
cout<<endl;
}
else{
for(int i=0;cnt1<n/2;i+=2){
if(first2) first2=0;
else cout<<" ";
cout<<a[i];
cnt1++;
}
for(int i=1;cnt2<n/2;i+=2){
if(first2) first2=0;
else cout<<" ";
cout<<a[n-i];
cnt2++;
}
cout<<endl;
}
}
return 0;
}

第三题,还是水题。

Ac代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
vector<unsigned long long>a;
int main(){
string s;
while(cin>>s){
for(int i=0;i<(int)s.length();i++) if(s[i]=='5') s[i]=' ';
stringstream ss(s);
unsigned long long x;
while(ss>>x)
a.push_back(x);
sort(a.begin(),a.end());
int first=1;
for(int i=0;i<(int)a.size();i++){
if(first) first=0;
else cout<<" ";
cout<<a[i];
}
cout<<endl;
a.clear();
}
return 0;
}

第四题,单元格调整,一开始在A和Z的处理上出现了问题。。卡了挺久的。。

Ac代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
void a_to_b(string s){
string a,b;
int c=0;
for(int i=0;i<s.length();i++)
if(!isdigit(s[i])) a+=s[i];
else b+=s[i];
for(int i=0;i<a.length();i++){
c*=26;
c+=a[i]-'A'+1;
}
cout<<"R"<<b<<"C"<<c<<endl;
}
void b_to_a(string s){
stringstream ss(s);
int a,b,k[6],t[6];
for(int i=0;i<6;i++){
t[i]=0;
int j=5-i;
k[i]=1;
while(j--) k[i]*=26;
}
string c;
ss.get();
ss>>a;
ss.get();
ss>>b;
for(int i=0;b>0;i++){
t[i]=b/k[i];
b-=t[i]*k[i];
}
for(int i=5;i>=0;i--){
int cnt=0;
for(int j=i-1;j>=0;j--)
if(t[j]>0) cnt++;
if(t[i]<=0&&cnt){
t[i]+=26;
t[i-1]--;
}
}
for(int i=0;i<6;i++)
if(t[i]>0)
c+='A'-1+t[i];
cout<<c<<a<<endl;
}
int main(){
string s;
int n;
cin>>n;
cin.get();
while(n--){
getline(cin,s);
int t=0;
for(int i=1;i<s.size();i++)
if(isalpha(s[i-1])&&isdigit(s[i])) t++;
if(t==1) a_to_b(s);
else b_to_a(s);
}
return 0;
}

本文迁移自我的 CSDN博客 ,格式可能有所偏差。