1. 程式人生 > >【AtCoder】AtCoder Beginner Contest 110題解

【AtCoder】AtCoder Beginner Contest 110題解

AtCoder Beginner Contest 110題解

A - Maximize the Formula

題目大意

給定三個數字A,B,CA,B,C,要求使用這三個數字組成一個兩位數及一個一位數,使得他們的和最大

思路

似乎沒有什麼可以講的,直接給出程式碼吧。

程式碼

#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

題目大意

給定兩個數N,MN,M和數軸上的兩個點X,YX,YNN個點x1,x2,x3,,xNx_1,x_2,x_3,\ldots,x_NMM個點y1,y2,y3,,yMy_1,y_2,y_3,\ldots,y_M

,y2,y3,,yM,要求找出一個點ZZ,使得它滿足以下條件:

  • X&lt;ZYX&lt;Z\le Y
  • x1,x2,x3,,xN&lt;Zx_1,x_2,x_3,\ldots,x_N&lt;Z
  • y1,y2,y3,,yMZy_1,y_2,y_3,\ldots,y_M\ge Z

思路

我們記x0=X,y0=Yx_0=X,y_0=Y,仔細分析題目可以發現,當存在max{x0,x1,x2,,xN}&lt;min{y0,y1,y2,

yM}\max\{x_0,x_1,x_2,\ldots,x_N\}&lt;\min\{y_0,y_1,y_2\ldots,y_M\}時,就會有ZZ存在。

所以直接給出程式碼:

程式碼

#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

題目大意

給定兩個串S,TS,T,保證兩串長度相等。要求使用如下操作,使得S,TS,T相同:

操作:從26個字母中選擇兩個字母c1,c2c_1,c_2,在SS中,將所有的c1c_1替換為c2c_2,所有的c2c_2替換為c1c_1

思路

不難發現在串SS中,每個字母和串TT中的每個字母是有一一對應的關係。所以我們考慮在串SS中是否滿足這個對應關係,在串TT中是否滿足對應關係。想到這個即可過掉此題。

程式碼

#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

題目大意

給定兩個數N,MN,M,要求找出NN個數,使得這NN個數的乘積等於MM。輸出方案數模109+710^9+7

思路

仔細分析可發現,這NN個數要麼是11,要麼就是NN的質因數的乘積。

很自然的就扯到了唯一分解和組合數學上去。

M=p1a1p2a2pmamM=p_1^{a_1}p_2^{a_2}\cdots p_m^{a_m},其中p1,p2,,pmp_1,p_2,\ldots,p_m為質數。

當我們將aia_i個質數pip_i(其中1im1\le i\le m)加入到NN個數中,就相當於將N+ai1N+a_i-1個數分成N1N-1塊的組合數。

所以我們就可以得到:此時的方案數為C(N+ai1,N1)C(N+a_i-1,N-1)。而由於在兩個方案之間,有一個數不同即被視為不同,所以,我們只需要將所有的方案數乘上即可。

即方案數為i=1mC(N+ai1,N1)\prod_{i=1}^{m}C(N+a_i-1,N-1)

相關推薦

AtCoderAtCoder Beginner Contest 110題解

AtCoder Beginner Contest 110題解 A - Maximize the Formula 題目大意 給定三個數字A,B,CA,B,CA,B,C,要求使用這三個數字組成一個兩位數

AtCoderDwango Programming Contest V題解

tco first rotation ram tmp pre 證明 必須 隊列 A - Thumbnail 根據題意寫代碼 #include <bits/stdc++.h> #define fi first #define se second #define p

USACO2018 February Contest, Platinum題解

【比賽經歷】看完T1先寫了一個\(O(NM)\)的暴力,交一發,得分5/10,說明正確地理解了題意。感覺T1碼量挺大的,於是先放了一下。T2是傻題,看完10min寫掉了,得分10/10。回過頭來把T1的線段樹碼了,一遍寫對,不用痛苦地調這個鬼題,提交,得分10/10,跑了1.

AtCoder AtCoder Beginner Contest 103 (ABC103)

先上一張最終結果的圖吧: 感覺AtCoder的ABC還是比較練手的,考驗程式碼速度,網速,D題還會有一些思維難度。 這次ABC由於網路原因,很遲才看到題,但完成得還是不錯的。 題解: A 題意:給你三個都需要被完成的任務的難度,均為1至100的正整數。 首先,你可以

AtCoder Beginner Contest 115 題解

most otto abc ostream def ring decide cin string 題目鏈接:https://abc115.contest.atcoder.jp/ A Christmas Eve Eve Eve 題目: Time limit : 2sec /

AtCoder Beginner Contest 110

第一場ATcoder就遇到測試樣例出問題取消本場積分的事情,嗚嗚嗚~~一份題解證明我來過!ABC水過前三道,排名575. 上週的比賽,因為最後一題加上拖延症,還是終於在本週比賽開始前來寫這個解題報告了。第一場體驗還是不錯的,後來發現有題解值得表揚(雖然是日語的)! 題

AtCoder Beginner Contest 112題解

AtCoder Beginner Contest 112 比賽連結 前言 這場ABC我用了一個小時AK (雖然我晚到了5分鐘)(雖然這是我第一次AK)。 所以我寫下這篇部落格作為紀念。 A.Progra

AtCoder Beginner Contest 121 題解

print 分享 題目 contest 題解 scanf alt strong pri 題目鏈接:https://atcoder.jp/contests/abc121 A White Cells 分析:題目數據規模很小,直接暴力修改都可以。或者可以推出公式. 代

ABC106DAtCoder Express 2 {DP}

stream als 結構 分鐘 () class 感覺 span 方程 //第一篇blog 題意: 自西向東延伸的鐵路上坐落著n個城市,現有m列火車, 給出它們的出發城市 Li 和目標城市 Ri,1 <= i <= m, 回答q次詢問,每次詢問給出pi和qi,

AtCoder Tenka1 Programmer Beginner Contest 解題報告

賽時寫了ABC,D實在沒啥思路,然後C又難調...然後就從寫完AB時的32名掉到了150+名 T_T 碼力不夠,思維不行,我還是AFO吧 比賽連結 A - Measure sb模擬,奇數串倒著輸出偶數串正著輸出 #include <bits/stdc++.h> #defi

p2722洛谷P2722總分題解

一個 ++ int ostream highlight log i++ space gpo 這個題是一個裸的完全背包問題,但是數組需要開大, 代碼 #include<iostream> using namespace std; int n,m,v,i; int

洛谷3384:模板樹鏈剖分——題解

cnblogs html amp font ring con OS Go 最短 https://www.luogu.org/problemnew/show/P3384 如題,已知一棵包含N個結點的樹(連通且無環),每個節點上包含一個數值,需要支持以下操作: 操作1:

p1434洛谷P1434滑雪題解及記憶化搜索的基本步驟

沒有 pac amp pri ring %d 產生 AR stream 滑雪是一道dp及記憶化搜索的經典題目。 所謂記憶化搜索便是在搜索的過程中邊記錄邊搜索的一個算法。 當下次搜到這裏時,便直接使用。 而且記憶化搜索一定要滿足無後效性,為什麽呢,因為如果不滿足無後效性

p3870洛谷P3870開關題解

long 自然 mes code 普通 flag 範圍 turn -m 我們先看題面,一看是一個區間操作,再看一下數據範圍,就可以很輕松地想到是用一個數據結構來加快區間查詢和修改的速度,所以我們很自然的就想到了線段樹。 但是這個題還跟普通的線段樹不一樣,這個題可以說要思考

貪心/DP/單調隊列CF1029BCreating the Contest

swap cout const output i+1 隊列 octopus 描述 ++i Description 給你一個單調不下降的長度為n的序列,請你找出一個最長的子序列,滿足找出的子序列中,\(A_i<=A_{i-1}~\times~2\),其中i為下標,A為找

LeetCode709. To Lower Case題解(C++)

【LeetCode】709. To Lower Case(C++) 709. To Lower Case Describe: Implement function ToLowerCase() that has a string parameter str, a

POJ2406Power Strings 中文題意&題解&程式碼(C++)

Power Strings Time Limit: 3000MS Memory Limit: 65536K Description Given two strings a and b we define a*b to be their conca

LISBZOJ1046(HAOI2007)[上升序列]題解

題目概述 給出 {an}{an} ,求下標字典序最小的上升子序列。 解題報告 水題吧……先求出 fifi 表示以 ii 為起點的最長上升子序列,然後只需要先找出第一個 fans1>xfa

貪心BZOJ1060(ZJOI2007)[時態同步]題解

題目概述 有一棵有邊權的有根樹,現在從根開始傳播JZ的神犇之力,經過一條邊的時間是該邊的邊權。為了JZ神犇之力的平衡,要求神犇之力傳播到所有葉子節點的時間相同。有一種操作是讓某條邊的邊權增加 11 ,求最少的運算元使得神犇之力平衡。 解題報告 肯定是要

BZOJ2118墨墨的等式 題解

2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MB Description 墨墨突然對等式很感興趣,他正在研究a1x1+a2y2+…+anxn=B存在非負整數解的條件,他要求你編寫一個程式,給定N、{a