A – 高橋直体
直方体は、A*B、B*C、A*Cの面を二つずつ持っているため、それぞれの面積を計算し足し合わせばOKです。
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
int main(){
int A,B,C;
cin>>A>>B>>C;
cout<<A*B*2+B*C*2+A*C*2<<endl;
}
B – エージェント高橋君
N^4=(N^2)^2です。
C++の場合、sqrtで2乗根の計算ができるので、それを2回通してやれば4乗根になります。
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
int main(){
long long N;
cin>>N;
cout<<sqrt(sqrt(N))<<endl;
}
sqrtは誤差が怖いよ!って場合は、制約が弱いのでNを全探索しても問題ありません。(Xの最大が10^9なので、Nは大きくても10^3程度)
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
int main(){
long long N;
cin>>N;
long long ans=1;
while(1){
if(ans*ans*ans*ans==N) break;
ans++;
}
cout<<ans<<endl;
}
C – ピアニスト高橋君
Doの入力パターンが入力例1にあり、ReやMiはこの入力をずらしたものになるはずです。
なので、全パターンをずらして作成しSと一致するものの、パターンの先頭の音(黒鍵盤を考えるなら、Doから2個ずらせばRe)を出せばOKです。
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
int main(){
string S;
cin>>S;
string D="WBWBWWBWBWBW";
int c=0;
while(1){
if(S.substr(0,D.size())==D) break;
c++;
D+=D[0];
D=D.substr(1,D.size()-1);
}
if(c==0) cout<<"Do"<<endl;
if(c==2) cout<<"Re"<<endl;
if(c==4) cout<<"Mi"<<endl;
if(c==5) cout<<"Fa"<<endl;
if(c==7) cout<<"So"<<endl;
if(c==9) cout<<"La"<<endl;
if(c==11) cout<<"Si"<<endl;
}
D – 画像処理高橋君
収縮後の自分1マスと周り1マスが”#”であるなら、そこは収縮前も”#”としていた方が良いです。
なので、上記条件でなるたけたくさん”#”を作成した画像を収縮させ、入力と一致するかを見ればOKです。
制約も弱いのでゴリゴリ書きましょう。
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
int main(){
int H,W;
cin>>H>>W;
string S[H];
for(int i=0;i<H;i++){
cin>>S[i];
}
string ans[H];
int dp[H][W];
for(int i=0;i<H;i++){
ans[i]="";
for(int j=0;j<W;j++){
ans[i]+='.';
dp[i][j]=0;
}
}
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
bool f=true;
if(S[i][j]=='.') f=false;
if(i-1>=0&&S[i-1][j]=='.') f=false;
if(i+1<H&&S[i+1][j]=='.') f=false;
if(j-1>=0&&S[i][j-1]=='.') f=false;
if(j+1<W&&S[i][j+1]=='.') f=false;
if(i-1>=0&&j-1>=0&&S[i-1][j-1]=='.') f=false;
if(i+1<H&&j+1<W&&S[i+1][j+1]=='.') f=false;
if(i+1<H&&j-1>=0&&S[i+1][j-1]=='.') f=false;
if(i-1>=0&&j+1<W&&S[i-1][j+1]=='.') f=false;
if(f){
dp[i][j]=1;
if(i-1>=0) dp[i-1][j]=1;
if(i+1<H) dp[i+1][j]=1;
if(j-1>=0) dp[i][j-1]=1;
if(j+1<W) dp[i][j+1]=1;
if(i-1>=0&&j-1>=0) dp[i-1][j-1]=1;
if(i+1<H&&j+1<W) dp[i+1][j+1]=1;
if(i+1<H&&j-1>=0) dp[i+1][j-1]=1;
if(i-1>=0&&j+1<W) dp[i-1][j+1]=1;
ans[i][j]='#';
}
}
}
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
//cout<<dp[i][j];
if(dp[i][j]==0&&S[i][j]=='#'){
cout<<"impossible"<<endl;
return 0;
}
}
//cout<<endl;
}
cout<<"possible"<<endl;
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
cout<<ans[i][j];
}
cout<<endl;
}
}
コメント