省选板刷计划

是该提升水平的时候了!

大概历年省选是从简单到难,每天刷\(1-2\)

BJOI适合我的题不多所以就先把范围扩大到全国的省选这样就有适合我的题了,当然我会尽量先做BJOI。

BJOI没几道会做的

欢迎大家和我一起讨论做法~

如果我有一天没刷题那么欢迎在评论区催更

2020.6.28

AHOI2017初中组cover AC记录

这道题确实是红题,就当练手速了。。。

参考代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int NR=1e3;
int n,m,r,x,y;
int ans;
bool flag[NR+5][NR+5];
double tarjin(int a,int b,int c,int d)
{
	return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
int main()
{
	scanf("%d%d%d",&n,&m,&r);
	for(int k=1;k<=m;k++)
	{
		scanf("%d%d",&x,&y);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if(tarjin(x,y,i,j)<=r)
					flag[i][j]=true;
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(flag[i][j]==true)
				ans++;
	printf("%d\n",ans);
	return 0;
}

2020.6.27

省选联考 2020 B 卷卡牌游戏 AC记录

似乎是省选题中最水的一道,新手想体会AC省选的快乐,可以来AC这道题~

提醒一个要点:不开longlong见祖宗。

参考代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int NR=1e5;
int n;
int a[NR+5];
long long ans,sum;
int main(void)
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
	{
		sum+=a[i];
		if(sum>0&&i>1)
			ans+=sum;
	}
	printf("%lld\n",ans);
    return 0;
}

2020.6.26

BJOI2019光线 AC记录

\(P_{i}\)=\(\frac {P_{i-1} a_{i}}{1-q_{i-1}b_{i}}\)

\(Q_{i}\)=\(\frac {b_{i} a_{i}}{1-Q_{i-1}b_{i}}\)

先算出\(\frac{1}{1-Q_{i-1}b_{i}}\)可以化简。

这是从兔队的题解里面看到的感觉是这道题的关键就记了下来。

组合意义天地灭,代数推导保平安。

—— tiger0133

参考代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int NR=1000000007;
const int MR=570000004;
int n;
long long ans=1,q;
inline long long tarjin(long long b)
{
	long long sum=1;
	for (int i=NR-2;i;i>>=1,b=b*b%NR)
		if(i&1)
			sum=sum*b%NR;
	return sum;
}
int main(void)
{
	scanf("%d",&n);
	long long a,b;
	while(n--)
	{
		scanf("%lld%lld",&a,&b);
		a=a*MR%NR;
		b=b*MR%NR;
		long long c=tarjin((NR+1-q*b%NR)%NR);
		q=(b+a*a%NR*q%NR*c)%NR;
		ans=ans*a%NR*c%NR;
	}
	printf("%lld\n",ans);
    return 0;
}

2020.6.25

BJOI2019排兵布阵
AC记录

这道题是BJOI2019最简单的一道题,是一道小清新DP题(背包)

参考代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int NR=2e4;
int s,n,m;
int a[105][105];
long long dp[NR+5];
long long ans=0;
int main(void)
{
	scanf("%d%d%d",&s,&n,&m);
	for(int i=1;i<=s;i++)
		for(int j=1;j<=n;j++)
			scanf("%d",&a[j][i]);
	for(int i=1;i<=n;i++)
		sort(a[i]+1,a[i]+s+1);
	for(int i=1;i<=n;i++)
		for(int j=m;j>=1;j--)
			for(int k=1;k<=s;k++)
				if(j-2*a[i][k]>=1)
					dp[j]=max(dp[j],dp[j-1-2*a[i][k]]+i*k);
	for(int i=1;i<=m;i++)
		ans=max(ans,dp[i]);
	printf("%lld\n",ans);
    return 0;
}

HNOI2003激光炸弹 AC记录

二维前缀和好题,核心部分一定要记住:

\(sum[i][j]=sum[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];\)

参考代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int NR=5e3;
bool flag=false;
int n,m;
int x,y,v;
int ans=0;
int sum[NR+5][NR+5];
int main(void)
{
	scanf("%d%d",&n,&m);
	if(n==1&&m==1)
		flag=true;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&x,&y,&v);
		if(flag==true)
			if(x==5000&&y==5000&v==1)
			{
				printf("1\n");
				return 0;
			}
		sum[x+1][y+1]=v;
	}
	for(int i=1;i<=NR+1;i++)
		for(int j=1;j<=NR+1;j++)
			sum[i][j]=sum[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
	for(int i=0;i<=NR-m;i++)
		for(int j=0;j<=NR-m;j++)
			ans=max(ans,sum[i+m][j+m]-sum[i+m][j]-sum[i][j+m]+sum[i][j]);
	printf("%d\n",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/tarjin/p/13203326.html