AtCoder Beginner Contest 043題解(ABCD)
A - Children and Candies (ABC Edit)
題意:求
思路:簽到題,直接按照公式輸出。
時間複雜度:
#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)
思路:按照題意模擬,用一個字符串數組維護即可。
時間複雜度:
#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
思路:因爲數據只有,範圍很小,直接暴力枚舉即可。
時間複雜度:
#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
思路:居然是個思維題。。其實我們只需要直到類型的字符串即可。
證明:假設不存在即兩個相同字母間最少間隔兩個字符。
所以字符串應該是這樣的形式:
因爲前四個字母不是滿足條件的,所以每次加一個,都至少要加個兩個其他的字母,所以永遠也不可能滿足條件的。
若存在這樣的字符串即這樣的字符串就是答案。
所以存在是滿足答案的充要條件。
所以順序遍歷判斷即可。
時間複雜度:
#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;
}