牛客白月赛20【题解】

https://ac.nowcoder.com/acm/contest/3282

斐波那契【矩阵快速幂】

在这里插入图片描述
前n项的平方和==a(n)*a(n+1)

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=15;
const int mod=1e9+7;
struct node{
    
    LL a[N][N];}a,ans;
int f[15]={
    
    0,1};
node mul1(node a,node b,LL p) 
{
    
    
	node c={
    
    0};
	for(int i=1;i<=1;i++)
	    for(int k=1;k<=2;k++)
			for(int j=1;j<=2;j++)
				c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%p;
	return c;
}
node mul2(node a,node b,LL p) 
{
    
    
	node c={
    
    0};
	for(int i=1;i<=2;i++)
		for(int k=1;k<=2;k++)
			for(int j=1;j<=2;j++)
				c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%p;
	return c;
}
node qsm(node a,LL b,LL p)
{
    
    
	node sum={
    
    0}; 
	sum.a[1][1]=1,sum.a[1][2]=1;
	while(b)
	{
    
    
		if(b&1) sum=mul1(sum,a,p);
		b>>=1;
		a=mul2(a,a,p);
	}
	return sum;
}
int main(void)
{
    
    
	LL n; cin>>n;
	a.a[1][1]=1,a.a[1][2]=1;
	a.a[2][1]=1,a.a[2][2]=0;
	if(n==1) puts("1");
	else
	{
    
    
		ans=qsm(a,n-1,mod);
    	cout<<(ans.a[1][1]*ans.a[1][2])%mod<<'\n';
    }
	return 0;
}

最大边长【二分】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e6+10;
const int mod=1e9+7;
LL a,b;
bool check(LL x)
{
    
    
	LL sum;
	sum=(a/x)*(b/x);
	return sum>=3;
}
int main(void)
{
    
    
	cin>>a>>b;
	LL l=1,r=1e18;
	while(l<r)
	{
    
    
		LL mid=(l+r+1)/2;
		if(check(mid)) l=mid;
		else r=mid-1;
	}
    if(check(l)) cout<<l;
    else cout<<0;
	return 0;
}

3的倍数【二进制枚举】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n;
vector< vector<int> >ve;
int main(void)
{
    
    
	cin>>n;
	for(int i=0;i<n;i++)
	{
    
    
		string s; cin>>s;
		int cnt[35]={
    
    0};
		vector<int>temp;
		for(int j=0;j<s.size();j++) cnt[s[j]-'A']++;
		for(int j=0;j<26;j++) temp.push_back(cnt[j]);
		ve.push_back(temp);
	}
	int ans=0;
	for(int i=0;i<(1<<n);i++)
	{
    
    
		int w[35]={
    
    0},cnt=0,flag=1;
		for(int j=0;j<n;j++)
		{
    
    
			if(i>>j&1)
			{
    
    
				cnt++;
				for(int k=0;k<ve[j].size();k++) w[k]+=ve[j][k];
			}
		}
		for(int j=0;j<26;j++) if(w[j]%3!=0) flag=0;
		if(flag) ans=max(ans,cnt);
	}
	cout<<ans;
	return 0;
}

进制转换【高精度】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
int m,n,res;
string s;
vector<int>A,C;
int get(char s)
{
    
    
    if(s<='9') return s-'0';
    else return s+10-'a';
}
vector<int> div(vector<int> A,int b,LL &res)
{
    
    
    vector<int>C;
    for(int i=A.size()-1;i>=0;i--)
    {
    
    
        res=res*m+A[i];
        C.push_back(res/b);
        res=res%b;
    }
    reverse(C.begin(),C.end());
    while(C.size()&&C.back()==0) C.pop_back();
    return C;
}
int main(void)
{
    
    
    cin>>s;
    cin>>m>>n;
    for(int i=s.size()-1;i>=0;i--) A.push_back(get(s[i]));
    while(A.size())
    {
    
    
        LL res=0;
        A=div(A,n,res);
        C.push_back(res);
    }
    for(int i=C.size()-1;i>=0;i--) 
    	if(C[i]<10) cout<<C[i];
    	else printf("%c",C[i]-10+'a');
}

好点【排序】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n;
vector< pair<int,int> >ve,ans;
int main(void)
{
    
    
	cin>>n;
	for(int i=0;i<n;i++)
	{
    
    
		int x,y; cin>>x>>y;
		ve.push_back({
    
    x,y}); 
	}
	sort(ve.begin(),ve.end());
	int h=-1e9-10;
	
	for(int i=ve.size()-1;i>=0;i--)
	{
    
    
		if(ve[i].second>=h) ans.push_back(ve[i]);
		h=max(h,ve[i].second);
	}
	sort(ans.begin(),ans.end());
	for(int i=0;i<ans.size();i++) cout<<ans[i].first<<" "<<ans[i].second<<'\n';
	return 0;
}

小小小马【找规律】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n,m,st[1010][1010];
int dx[8]={
    
    -2,-2,-1,-1,1,1,2,2}; 
int dy[8]={
    
    -1,1,-2,2,-2,2,-1,1};
bool check()
{
    
    
	queue< pair<int,int> >q; q.push({
    
    1,1});
	st[1][1]=1;
	while(q.size())
	{
    
    
		auto temp=q.front(); q.pop();
		int x=temp.first,y=temp.second;
		for(int i=0;i<8;i++)
		{
    
    
			int tempx=x+dx[i],tempy=y+dy[i];
			if(tempx<=0||tempx>n||tempy<=0||tempy>m) continue;
			if(st[tempx][tempy]) continue;
			st[tempx][tempy]=1;
			q.push({
    
    tempx,tempy});
		}
	}
	int cnt=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) if(st[i][j]) cnt++;
	return cnt==n*m;
}
int main(void)
{
    
    
	cin>>n>>m;
	//if(check()) puts("YES");
	//else puts("NO");
    if(n==3&&m==3)
    {
    
    
        puts("No");
        return 0;
    }
	if((n==1&&m==1)||(n>=3&&m>=3)) puts("Yes");
	else puts("No");
	return 0;
}
//1 1 y
//1 2 N
//2 1 N
//2 2 N
//2 3 N
//3 2 N
//3 3 N
//3 4 Y
//4 3 Y
//4 4 Y
//4 5 Y
//5 4 Y
//5 5 Y
//5 6 Y
//6 5 Y 
//6 6 Y
//

Hello World【签到】

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    
    
	puts("I Love nowcoder");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/124549933