AtCoder Beginner Contest 043題解(ABCD)

AtCoder Beginner Contest 043題解(ABCD)

傳送門

A - Children and Candies (ABC Edit)

題意:求i=1ni\sum\limits_{i=1}^n i

思路:簽到題,直接按照公式輸出n(n+1)2\dfrac{n(n+1)}{2}

時間複雜度:O(1)O(1)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first 
#define se second
int main(){
	int n;	
	cin>>n;
	cout<<n*(n+1)/2;
	return 0;
}

B - Unhappy Hacking (ABC Edit)

思路:按照題意模擬,用一個字符串數組維護即可。

時間複雜度:O(n)O(n)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first 
#define se second
char ans[N];
int main(){
	string s;
	cin>>s;
	int n=s.size();
	int x=0;
	for(int i=0;i<n;i++){
		if(s[i]=='0') ans[++x]='0';
		else if(s[i]=='1') ans[++x]='1';
		else if(s[i]=='B'&&x){
			x--;
		}
	}
	for(int i=1;i<=x;i++) cout<<ans[i];
	cout<<ans;
	return 0;
}

C - Be Together

思路:因爲數據只有100100,範圍很小,直接暴力枚舉即可。

時間複雜度:O(100n)O(100n)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=105+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first 
#define se second
int a[N];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	int ans=1e9;
	for(int i=-100;i<=100;i++){
		int sum=0;
		for(int j=1;j<=n;j++){
			sum+=(i-a[j])*(i-a[j]);
		}
		ans=min(ans,sum);
	} 
	cout<<ans;
	return 0;
}

D - Unbalanced

思路:居然是個思維題。。其實我們只需要直到XX,XYXXX,XYX類型的字符串即可。

證明:假設不存在XX,XYXXX,XYX即兩個相同字母間最少間隔兩個字符。

所以字符串應該是這樣的形式:AXYAXYAXYAAXYAXYAXYA

因爲前四個字母不是滿足條件的,所以每次加一個AA,都至少要加個兩個其他的字母XYXY,所以永遠也不可能滿足條件的。

若存在XX,XYXXX,XYX這樣的字符串即這樣的字符串就是答案。

所以存在XX,XYXXX,XYX是滿足答案的充要條件。

所以順序遍歷判斷即可。

時間複雜度:O(n)O(n)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first 
#define se second
char a[N];
int main(){
	scanf("%s",a);
	int l=strlen(a);
	for(int i=0;i<l-1;i++){
		if(a[i]==a[i+1]){
			printf("%d %d\n",i+1,i+2);
			return 0;
		}
		if(a[i]==a[i+2]){
			printf("%d %d\n",i+1,i+3);
			return 0;
		}
	}
	puts("-1 -1");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章