ACdream地区試合指導試合の手速試合シリーズ(5)解題報告A C D
5041 ワード
Problem A
題意:進数変換であり、異なる進数の異なる記号システム間で変換され、デジタル記号は必ずしも通常使用される0123ではなく、1つの文字列によって与えられる.
構想:水題、記号システムの長さは何進数で、回転してから相応の記号で出力すればいいです.
Problem C
件名:文字列を挿入ソートします.何回移動するかを尋ねる.
構想:水題.現在の最後の文字列を記録します.次がそれより小さい場合は、回数+1です.
Problem D
題意:一連の数字を並べ替える.並んだ後は元々奇数の位置なのか奇数なのか、偶数の位置なのか偶数なのか.ここで奇数は昇順、偶数は降順である.
構想:水題.
題意:進数変換であり、異なる進数の異なる記号システム間で変換され、デジタル記号は必ずしも通常使用される0123ではなく、1つの文字列によって与えられる.
構想:水題、記号システムの長さは何進数で、回転してから相応の記号で出力すればいいです.
/*
* this code is made by squee_spoon
* Problem: 1038
* Verdict: Accepted
* Submission Date: 2014-08-22 19:41:23
* Time: 0MS
* Memory: 1676KB
*/
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctype.h>
#include <sstream>
#define INF 1000000
#define ll long long
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define MAXN 100010
using namespace std;
int main() {
int t;
cin>>t;
int _case=0;
while(t--){
_case++;
string num;
string s;
string t;
cin>>num>>s>>t;
int lens=s.size();
int lent=t.size();
int lennum=num.size();
// 10
ll s10=0;
for(int i=0;i<lennum;i++){
s10*=lens;
int end=s.size();
int j;
for(j=0;j<end;j++){
if(num[i]==s[j])break;
}
s10+=(j);
}
ll tmp=1;
int k=0;
while(tmp<=s10){
tmp*=lent;
k++;
}
tmp/=lent;
printf("Case #%d: ",_case);
if(s10==0)cout<<t[0];
for(int i=k;i>0;i--){
int cnt=0;
while(s10-tmp>=0){
s10-=tmp;
cnt++;
}
tmp/=lent;
cout<<t[cnt];
}
cout<<endl;
}
return 0;
}
Problem C
件名:文字列を挿入ソートします.何回移動するかを尋ねる.
構想:水題.現在の最後の文字列を記録します.次がそれより小さい場合は、回数+1です.
/*
* this code is made by squee_spoon
* Problem: 1146
* Verdict: Accepted
* Submission Date: 2014-08-22 20:02:19
* Time: 12MS
* Memory: 1676KB
*/
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctype.h>
#include <sstream>
#define INF 1000000
#define ll long long
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define MAXN 100010
using namespace std;
int main() {
int t;
cin>>t;
int _case=0;
while(t--){
_case++;
int n;
cin>>n;
string str;
string last;
getline(cin,last);
getline(cin,last);
int ans=0;
for(int i=2;i<=n;i++){
getline(cin,str);
if(last>str){
ans++;
}else{
last=str;
}
}
printf("Case #%d: ",_case);
cout<<ans<<endl;
}
return 0;
}
Problem D
題意:一連の数字を並べ替える.並んだ後は元々奇数の位置なのか奇数なのか、偶数の位置なのか偶数なのか.ここで奇数は昇順、偶数は降順である.
構想:水題.
/*
* this code is made by squee_spoon
* Problem: 1189
* Verdict: Accepted
* Submission Date: 2014-08-22 20:15:09
* Time: 8MS
* Memory: 1684KB
*/
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctype.h>
#include <sstream>
#define INF 1000000
#define ll long long
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define MAXN 100010
using namespace std;
int books[1010];
int main() {
int t;
cin>>t;
int _case=0;
while(t--){
_case++;
vector<int> A;
vector<int> B;
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>books[i];
if(books[i]&1){
A.push_back(books[i]);
}else{
B.push_back(books[i]);
}
}
sort(A.begin(),A.end());
sort(B.begin(),B.end());
printf("Case #%d: ",_case);
int ka=0,kb=B.size()-1;
for(int i=1;i<=n;i++){
if(books[i]&1){
cout<<A[ka++];
}else{
cout<<B[kb--];
}
if(i!=n)cout<<" ";
}
cout<<endl;
}
return 0;
}