第八届篮桥练习

B标题:等差素数列

2,3,5,7,11,13,…是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。

2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!

有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:

长度为10的等差素数列,其公差最小值是多少?

注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。

线性筛晒素数
模拟公差 遍历素数即可

#include
#include
#include
using namespace std;
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
typedef long long ll;
typedef pair<int,int> PII;
ll mod=1e9+7;
ll read(){
     ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
if(c == '-')Nig = -1,c = getchar();
while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
return Nig*x;}
int qow_m(int n,int w){
     int k=1;while(w){if(w&1)k=k*n%mod;	n=n*n%mod;	w>>=1;}return k%mod; }
const int maxn =1e6+7 ;//..ll sum=1;
ll lowbit(ll x)	{
     return x&(-x);}
ll n,m,k,wz,cnt=0,num=0;
int pre[maxn];
int f[maxn];
void slu(){
     
	f[1]=1;
	for(int i=2;i<=maxn;i++){
     
		if(!f[i]) pre[++cnt]=i;
		
		for(int j=1;j<=cnt&&i*pre[j]<=maxn;j++){
     
			f[i*pre[j]]=1;
			
			if(i%pre[j]==0)
			break;
		}
	}
}

int main(){
     
	slu();
	for(int i=1;i<=maxn;i++){
     
		for(int j=1;j<=cnt;j++){
     
			int temp=pre[j];
			for(int k=1;k<10;k++){
     
				if(temp+i>=maxn||f[temp+i]){
     
					break;
				}temp+=i;
				if(k==9){
     
					printf("%d",i);
					return 0;
				}
			}
		}
	}
	return 0;
}




C
模拟即可 找比例

#include
#include
#include
using namespace std;
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
typedef long long ll;
typedef pair<int,int> PII;
ll mod=1e9+7;
ll read(){
     ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
if(c == '-')Nig = -1,c = getchar();
while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
return Nig*x;}
int qow_m(int n,int w){
     int k=1;while(w){
     if(w&1)k=k*n%mod;	n=n*n%mod;	w>>=1;}return k%mod; }
const int maxn =1e6+7 ;//..ll sum=1;
ll lowbit(ll x)	{
     return x&(-x);}
ll n,m,k,wz,cnt=0,num=0;
double dp[521][520];

int main(){
     
	for(int i=1;i<=29;i++){
     
		for(int j=1;j<=i;j++){
     
			cin>>dp[i][j];
		}
	}
	for(int i=2;i<=30;i++){
     
		for(int j=1;j<=i;j++){
     
			dp[i][j]+=(dp[i-1][j-1]+dp[i-1][j])/2;
		}
	}
	double maxa=0;
	double mina=104812904;
	for(int i=1;i<=30;i++){
     
		maxa=max(maxa,dp[30][i]);
		mina=min(mina,dp[30][i]);
	}
	printf("%.lf",maxa*(2086458231/mina));
	return 0;
}

第八届篮桥练习_第1张图片
dfs模拟分割路线 对称分割 由于旋转不算 答案/4 509

#include
#include
#include
using namespace std;
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
typedef long long ll;
typedef pair<int,int> PII;
ll mod=1e9+7;
ll read(){
     ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
if(c == '-')Nig = -1,c = getchar();
while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
return Nig*x;}
int qow_m(int n,int w){
     int k=1;while(w){
     if(w&1)k=k*n%mod;	n=n*n%mod;	w>>=1;}return k%mod; }
const int maxn =1e6+7 ;//..ll sum=1;
ll lowbit(ll x)	{
     return x&(-x);}
ll n,m,k,wz,cnt=0,ans=0;
int vis[521][520];
int dis[4][2]={
     {
     1,0},{
     -1,0},{
     0,1},{
     0,-1}};
int lu[100][100];
void dfs(int x,int y){
     
	if(x==0||x==6||y==0||y==6){
     
		ans++;
		return;
		
	}
	for(int i=0;i<4;i++){
     
		int dx=x+dis[i][0];
		int dy=y+dis[i][1];
		
		if(!vis[dx][dy]){
     
			vis[dx][dy]=1;
			vis[6-dx][6-dy]=1;
			dfs(dx,dy);
			vis[dx][dy]=0;
			vis[6-dx][6-dy]=0;
		}
	}
	
}
int main(){
     
	
	n=6;
	vis[3][3]=1;
	dfs(3,3);
	cout<<ans/4;
	
	return 0;
}

补充lcs
练习一下lcs

#include
#include
#include
using namespace std;
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
typedef long long ll;
typedef pair<int,int> PII;
ll mod=1e9+7;
ll read(){
     ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
if(c == '-')Nig = -1,c = getchar();
while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
return Nig*x;}
int qow_m(int n,int w){
     int k=1;while(w){
     if(w&1)k=k*n%mod;	n=n*n%mod;	w>>=1;}return k%mod; }
const int maxn =1e6+7 ;//..ll sum=1;
ll lowbit(ll x)	{
     return x&(-x);}
ll n,m,k,wz,cnt=0,ans=0;
int vis[521][520];
int dis[4][2]={
     {
     1,0},{
     -1,0},{
     0,1},{
     0,-1}};
int lu[100][100];
void lcs(string a,string b,int l1,int l2){
     
	int ls[100][100];
	for(int i=1;i<=l1;i++){
     
		for(int j=1;j<=l2;j++){
     
			if(!i||!j){
     
				ls[i][j]=0;
			}
			else if(a[i-1]==b[j-1]){
     
				ls[i][j]=ls[i-1][j-1]+1;
			}
			else{
     
				ls[i][j]=max(ls[i-1][j],ls[i][j-1]);
			}
		}
	}
	cout<<ls[l1][l2];
}
int main(){
     
	
	string a,b;
	cin>>a>>b;
	lcs(a,b,a.size(),b.size());
	return 0;
}

你可能感兴趣的:(题目,其他)