[ABC266] AtCoder Beginner Contest 266

比赛链接:Tasks - AtCoder Beginner Contest 266

先贴代码,题解有空再补。

Tasks


Task Name Time Limit Memory Limit
A Middle Letter 2 sec 1024 MB Submit
B Modulo Number 2 sec 1024 MB Submit
C Convex Quadrilateral 2 sec 1024 MB Submit
D Snuke Panic (1D) 2 sec 1024 MB Submit
E Throwing the Die 2 sec 1024 MB Submit
F Well-defined Path Queries on a Namori 3 sec 1024 MB Submit
G Yet Another RGB Sequence 2 sec 1024 MB Submit
Ex Snuke Panic (2D) 5 sec 1024 MB Submit

Solutions

A

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;

int main()
{
//	freopen("1.in","r",stdin);
	string str;
	cin>>str;
	printf("%c\n",str[str.length()/2]);
	return 0;
}

B

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;

int main()
{
//	freopen("1.in","r",stdin);
	LL x;
	cin>>x;
	const LL MOD=998244353;
	printf("%lld\n",(x%MOD+MOD)%MOD);
	return 0;
}

C

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long LL;
typedef long double LD;
typedef pair<int,int> PII;
typedef unsigned long long ULL;

const int N=1000;

PII a[N];

int S(int x,int y,int z)
{
	int x_1=a[y].first-a[x].first;
	int y_1=a[y].second-a[x].second;
	int x_2=a[z].first-a[x].first;
	int y_2=a[z].second-a[x].second;
	return abs(x_1*y_2-x_2*y_1);
}

int main()
{
	for(int i=1;i<=4;i++) {
		cin>>a[i].first>>a[i].second;
		a[i+4]=a[i];
		a[i+8]=a[i];
	}
	int ans=S(1,2,3)+S(1,3,4);
	for(int i=2;i<=9;i++) {
		int siz=S(i-1,i,i+1)+S(i-1,i+1,i+2);
		if(siz!=ans) return puts("No")&0;
	}
	puts("Yes");
	return 0;
}

D

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;

const int N=1e5+5;

int n,m;
LL f[N][5],a[N][5];

int main()
{
//	freopen("1.in","r",stdin);
	scanf("%d",&n);
	for(int i=1,t,x,z;i<=n;i++) {
		scanf("%d%d%d",&t,&x,&z);
		a[t][x]+=z;
		m=max(m,t);
	}
	memset(f,-0x3f,sizeof f);
	f[0][0]=0;
	for(int i=1;i<=m;i++) 
		for(int j=0;j<=4;j++) {
			f[i][j]=f[i-1][j]+a[i][j];
			if(j-1>=0) f[i][j]=max(f[i][j],f[i-1][j-1]+a[i][j]);
			if(j+1<=4) f[i][j]=max(f[i][j],f[i-1][j+1]+a[i][j]);
		}
	
	LL ans=0;
	for(int i=0;i<=4;i++) ans=max(ans,f[m][i]);
	printf("%lld\n",ans);
	return 0;
}

E

一道期望题,重点在于读懂题目什么意思。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;

const int N=1000+5;

double f[N]; // f[i][j] 表示策略下在前 i 轮拿到 j 的概率 
int n;

int main()
{
	scanf("%d",&n);
	f[1]=3.5;
	for(int i=2;i<=n;i++) {
		for(int j=1;j<=6;j++) {
			if(j<f[i-1]) f[i]+=f[i-1];
			else f[i]+=j;
		}
		f[i]/=6;
	}		 
	printf("%.10lf\n",f[n]);
	return 0;
}

F

拓扑排序

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;

const int N=4e5+5;

int one[N],idx;
int ver[N],Next[N];
void AddEdge(int a,int b)
{
	Next[idx]=one[a]; ver[idx]=b; one[a]=idx++;
}

int n,m;

queue<int> q;
int deg[N];
bool vis[N];

void topsort()
{
	while(q.size()) q.pop();
	memset(vis,false,sizeof vis);
	
	for(int i=1;i<=n;i++) {
		if(deg[i]==1) {
			q.push(i);
			vis[i]=true;
		}
	}
	
	while(q.size()) {
		int x=q.front(); q.pop();
		for(int i=one[x],y;~i;i=Next[i]) {
			y=ver[i];
			if(vis[y]) continue;
			if((--deg[y])==1) q.push(y),vis[y]=true;
		}
	}
}

int col[N];
void color(int x,int fa,int c)
{
	col[x]=c;
	for(int i=one[x];~i;i=Next[i]) {
		int y=ver[i];
		if(y==fa || !vis[y]) continue;
		color(y,x,c);
	}
}

int main()
{
//	freopen("1.in","r",stdin);
	
	scanf("%d",&n);
	memset(one,-1,sizeof one); idx=0;
	for(int i=1,x,y;i<=n;i++) {
		scanf("%d%d",&x,&y);
		AddEdge(x,y); AddEdge(y,x);
		deg[x]++; deg[y]++;
	}
	topsort();
	
	for(int i=1;i<=n;i++) {
		if(vis[i]) continue;
		color(i,-1,i);
	}
	
	int x,y;
	scanf("%d",&m);
	while(m--) {
		scanf("%d%d",&x,&y);
		if(col[x]==col[y]) puts("Yes");
		else puts("No");
	}
	
	return 0;
}

G

计数问题

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;

const LL P=998244353;
const int N=3e6+5;

LL fact[N];
LL power(LL x,LL k)
{
	LL res=1;
	while(k) {
		if(k&1) res=res*x%P;
		x=x*x%P; k>>=1;
	} 
	return res%P;
}
LL inv(LL x) { return power(x,P-2); } 

LL C(LL n,LL m) 
{
	if(m>n || m<0) return 0;
	else return fact[n]*inv(fact[m])%P*inv(fact[n-m])%P;
}

LL R,G,B,k;
LL n;

int main()
{
//	freopen("1.in","r",stdin);
	fact[0]=1;
	for(int i=1;i<N;i++) 
		fact[i]=fact[i-1]*i%P;
	
	scanf("%lld%lld%lld%lld",&R,&G,&B,&k);
	n=R+G+B-k;
	LL ans=C(n-(G-k),k)*C(n-(G-k)-k,R-k)%P; // 排 RG,R,B 
	ans=ans*(C(B+k+G-k,G-k)%P)%P;
	printf("%lld\n",ans);
	return 0;
}

posted @ 2023-02-02 20:27  cjlworld  阅读(30)  评论(0编辑  收藏  举报