【AtCoder】AtCoder Beginner Contest 110題解
阿新 • • 發佈:2018-12-11
AtCoder Beginner Contest 110題解
A - Maximize the Formula
題目大意
給定三個數字,要求使用這三個數字組成一個兩位數及一個一位數,使得他們的和最大
思路
似乎沒有什麼可以講的,直接給出程式碼吧。
程式碼
#include<cstdio>
#include<algorithm>
using namespace std;
int main() {
#ifdef LOACL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout );
#endif
int a[3];
scanf("%d %d %d",&a[0],&a[1],&a[2]);
sort(a,a+3);
printf("%d\n",a[2]*10+a[1]+a[0]);
return 0;
}
B - 1 Dimensional World’s Tale
題目大意
給定兩個數和數軸上的兩個點與個點和個點,要求找出一個點,使得它滿足以下條件:
思路
我們記,仔細分析題目可以發現,當存在時,就會有存在。
所以直接給出程式碼:
程式碼
#include<cstdio>
#include<algorithm>
using namespace std;
const int Maxn=100;
int N,M,X,Y;
int A[Maxn+5],B[Maxn+5];
int main() {
#ifdef LOACL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
scanf("%d %d %d %d",&N,&M,&A[0],&B[0]);
for(int i=1;i<=N;i++)
scanf("%d",&A[i]);
for(int i=1;i<=M;i++)
scanf("%d",&B[i]);
int maxa=*max_element(A,A+N+1);
int minb=*min_element(B,B+M+1);
if(maxa<minb)
puts("No War");
else puts("War");
return 0;
}
C - String Transformation
題目大意
給定兩個串,保證兩串長度相等。要求使用如下操作,使得相同:
操作:從26個字母中選擇兩個字母,在中,將所有的替換為,所有的替換為。
思路
不難發現在串中,每個字母和串中的每個字母是有一一對應的關係。所以我們考慮在串中是否滿足這個對應關係,在串中是否滿足對應關係。想到這個即可過掉此題。
程式碼
#include<set>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Maxn=2*1e5;
char s[Maxn+5],t[Maxn+5];
int c[256+5];
int main() {
#ifdef LOACL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
scanf("%s %s",s,t);
int len=strlen(s);
memset(c,-1,sizeof c);
set<char> cnt;
for(int i=0;i<len;i++)
cnt.insert(s[i]);
for(int i=0;i<len;i++) {
if(c[t[i]]!=-1&&c[t[i]]!=s[i]) {
if(t[i]==s[i]&&cnt.size()<26)
continue;
puts("No");
return 0;
}
c[t[i]]=s[i];
}
memset(c,-1,sizeof c);
for(int i=0;i<len;i++) {
if(c[s[i]]!=-1&&c[s[i]]!=t[i]) {
if(t[i]==s[i]&&cnt.size()<26)
continue;
puts("No");
return 0;
}
c[s[i]]=t[i];
}
puts("Yes");
return 0;
}
D - Factorization
題目大意
給定兩個數,要求找出個數,使得這個數的乘積等於。輸出方案數模。
思路
仔細分析可發現,這個數要麼是,要麼就是的質因數的乘積。
很自然的就扯到了唯一分解和組合數學上去。
記,其中為質數。
當我們將個質數(其中)加入到個數中,就相當於將個數分成塊的組合數。
所以我們就可以得到:此時的方案數為。而由於在兩個方案之間,有一個數不同即被視為不同,所以,我們只需要將所有的方案數乘上即可。
即方案數為