【比賽】 AtCoder Beginner Contest 166


題意/題解

A A?C

  • 題意:輸入一個字符串可能是'ABC'也可能是'ARC',如果是'ABC'就輸出'ARC',如果是'ARC'就輸出'ABC'。
  • 題解:sb題

B Trick or Treat

  • 題意:有 \(n\) 個人,\(k\) 個小吃,給你第 \(i\) 個小吃有哪幾個人有,讓你判斷沒有小吃的有幾個人。
  • 題解:開個數組記一下誰沒小吃就行。

C Peaks

  • 題意:有 \(n\) 個天文台,天文台之間有道路鏈接,判斷有多少天文台比與其鏈接的其他天文台都高。
  • 題解:一邊讀邊一邊一邊判斷這座天文台是否滿足條件。

D I hate Factorization

  • 題意:給你 \(X\),讓你找到一組 \(A,B\) 使得 \(A^5-B^5=X\)
  • 題解:\(100 ^ 5 = 10000000000\),然后在 \(-100 \sim 100\) 之間枚舉 \(A,B\) 發現過不了,那就在 \(-200 \sim 200\) 之間枚舉 \(A,B\) 了。

E This Message Will Self-Destruct in 5s

  • 題意:讓你求滿足 \(j-i= a_j+a_i\) 這個條件的對數。
  • 題解:\(j-i= a_j+a_i\)\(j-a_j=a_i+i\),用一個map記錄一下 \(a_i+i\) 出現的次數,對於每個 \(j-a_j\) 答案加上 \(j-a_j\)map中出現的次數。

F Three Variables Game

  • 題意:給你 \(n\) 個操作和三個數 \(A,B,C\),每次操作都為 ABACBC 的形式,每次操作為從兩個數中選一個加一,另一個減一,讓你判斷最后能不能都不為負數。
  • 題解:dfs可以過。

代碼

A A?C

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

std::string s;

int main() {
	std::cin>>s;
	if(s=="ABC") puts("ARC");
	else if(s=="ARC") puts("ABC");
	return 0;
}

B Trick or Treat

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int n,k;
bool haved[101];

int main() {
	read(n),read(k);
	for(int i=1,d;i<=k;++i) {
		read(d);
		for(int j=1,x;j<=d;++j) {
			read(x);
			haved[x]=1;
		}
	}
	int ans=0;
	for(int i=1;i<=n;++i) {
		if(!haved[i]) ++ans;
	}
	std::cout<<ans<<'\n';
	return 0;
}

C Peaks

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int n,m,a[100001];
bool OK[100001];

int main() {
	read(n),read(m);
	for(int i=1;i<=n;++i) read(a[i]);
	for(int i=1,u,v;i<=m;++i) {
		read(u),read(v);
		if(a[u]>=a[v]) OK[v]=1;
		if(a[v]>=a[u]) OK[u]=1;
	}
	int ans=0;
	for(int i=1;i<=n;++i) {
		if(!OK[i]) ++ans;
	}
	std::cout<<ans<<'\n';
	return 0;
}

D I hate Factorization

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

typedef long long ll;
inline void read(ll &T) {
	ll x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

ll x;

ll qpow(ll a,ll b) {
	ll ans=1,base=a;
	while(b) {
		if(b&1) ans=ans*base;
		base=base*base;
		b>>=1;
	}
	return ans;
}

int main() {
	read(x);
	for(ll i=-200;i<=200;++i) {
		for(ll j=-200;j<=200;++j) {
			if(qpow(i,5)-qpow(j,5)==x) {
				std::cout<<i<<" "<<j<<'\n';
				return 0;
			}
		}
	}
	return 0;
}

E This Message Will Self-Destruct in 5s

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
#define MAXN 200001

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int n,a[MAXN];
std::map<int,int> m;

int main() {
	read(n);
	for(int i=1;i<=n;++i) {
		read(a[i]);
		++m[a[i]+i];
	}
	long long ans=0;
	for(int i=1;i<=n;++i) {
		if(i>a[i]) ans+=m[i-a[i]];
	}
	std::cout<<ans<<'\n';
	return 0;
}

F Three Variables Game

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int n,a,b,c;
char ans[100001];
std::string cmd[100001];

void dfs(int step,int a,int b,int c) {
	if(step>n) {
		puts("Yes");
		for(int i=1;i<=n;++i) {
			printf("%c\n",ans[i]);
		}
		exit(0);
	}
	if(cmd[step]=="AB") {
		if(a) {
			ans[step]='B';
			dfs(step+1,a-1,b+1,c);
		}
		if(b) {
			ans[step]='A';
			dfs(step+1,a+1,b-1,c);
		}
	}
	if(cmd[step]=="AC") {
		if(a) {
			ans[step]='C';
			dfs(step+1,a-1,b,c+1);
		}
		if(c) {
			ans[step]='A';
			dfs(step+1,a+1,b,c-1);
		}
	}
	if(cmd[step]=="BC") {
		if(b) {
			ans[step]='C';
			dfs(step+1,a,b-1,c+1);
		}
		if(c) {
			ans[step]='B';
			dfs(step+1,a,b+1,c-1);
		}
	}
}

int main() {
	read(n),read(a),read(b),read(c);
	for(int i=1;i<=n;++i) std::cin>>cmd[i];
	dfs(1,a,b,c);puts("No");
	return 0;
}

反思:

  • 讀題浪費了太多時間。
  • 太菜了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM