2023/2/26

2023/2/26

数列求值

在这里插入图片描述
只取后四位递推

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void slove(){
	int f1=1,f2=1,f3=1;
	for(int i=4;i<=20190324;i++){
		int f=(f3+f2+f1)%10000;
		f1=f2;
		f2=f3;
		f3=f;
	}
	cout<<f3%10000<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
迷宫

在这里插入图片描述
bfs跑最短路

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
string mp[30]={
	"01010101001011001001010110010110100100001000101010",
	"00001000100000101010010000100000001001100110100101",
	"01111011010010001000001101001011100011000000010000",
	"01000000001010100011010000101000001010101011001011",
	"00011111000000101000010010100010100000101100000000",
	"11001000110101000010101100011010011010101011110111",
	"00011011010101001001001010000001000101001110000000",
	"10100000101000100110101010111110011000010000111010",
	"00111000001010100001100010000001000101001100001001",
	"11000110100001110010001001010101010101010001101000",
	"00010000100100000101001010101110100010101010000101",
	"11100100101001001000010000010101010100100100010100",
	"00000010000000101011001111010001100000101010100011",
	"10101010011100001000011000010110011110110100001000",
	"10101010100001101010100101000010100000111011101001",
	"10000000101100010000101100101101001011100000000100",
	"10101001000000010100100001000100000100011110101001",
	"00101001010101101001010100011010101101110000110101",
	"11001010000100001100000010100101000001000111000010",
	"00001000110000110101101000000100101001001000011101",
	"10100101000101000000001110110010110101101010100001",
	"00101000010000110101010000100010001001000100010101",
	"10100001000110010001000010101001010101011111010010",
	"00000100101000000110010100101001000001000000000010",
	"11010000001001110111001001000011101001011011101000",
	"00000110100010001000100000001000011101000000110011",
	"10101000101000100010001111100010101001010000001000",
	"10000010100101001010110000000100101010001011101000",
	"00111100001000010000000110111000000001000000001011",
	"10000001100111010111010001000110111010101101111000"
};
string ans[30][50];
int d[30][50];
char st[4]={'D','L','R','U'};
int sx[4]={1,0,0,-1},sy[4]={0,-1,1,0};
void slove(){
	memset(d,127,sizeof(d));
	queue<pair<int,int>>q;
	q.push({0,0});
	ans[0][0]="";
	d[0][0]=0;
	while(q.size()){
		auto [x,y]=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			int xx=x+sx[i],yy=y+sy[i];
			if(xx<0||xx>=30||yy<0||yy>=50)continue;
			if(mp[xx][yy]=='1')continue;
			if(d[xx][yy]>d[x][y]+1){
				d[xx][yy]=d[x][y]+1;
				q.push({xx,yy});
				ans[xx][yy]=ans[x][y]+st[i];
			}
//			else if(d[xx][yy]==d[x][y]+1){
//				ans[xx][yy]=min(ans[xx][yy],ans[x][y]+st[i]);
//			}
		}
	}
	cout<<ans[29][49]<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
完全二叉树的权值

在这里插入图片描述
模拟

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
#define int long long
void slove(){
	int n;
	cin>>n;
	int res=-1e18,sum=0;
	int cnt=1,t=1,now=1,ans=1;
	for(int i=1;i<=n;i++){
		t--;
		int x;
		cin>>x;
		sum+=x;
		if(t==0){
			if(sum>res){
				res=sum;
				ans=now;
			}
			cnt*=2;
			t=cnt;
			now++;
			sum=0;
		}
	}
	if(sum>res){
		res=sum;
		ans=now;
	}
	cout<<ans<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
组队

在这里插入图片描述

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void slove(){
	cout<<97+99+99+97+98<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
年号字串

在这里插入图片描述
进制转换

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void dfs(int x){
	if(x>26){
		dfs(x/26);
	}
	cout<<char(x%26+'A'-1);
}
void slove(){
	dfs(2019);
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
数的分解

在这里插入图片描述
枚举

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
bool pd(int i){
	while(i){
		if(i%10==2||i%10==4)return true;
		i/=10;
	}
	return false;
}
void slove(){
	int ans=0;
	for(int i=1;i<=2019;i++){
		if(pd(i))continue;
		for(int j=i+1;j<=2019;j++){
			if(pd(j))continue;
			int k=2019-i-j;
			if(i<j&&j<k){
				if(pd(k))continue;
				ans++;
			}
		}
	}
	cout<<ans;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
特别数的和

在这里插入图片描述
枚举

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void slove(){
	int n;
	cin>>n;
	ll s=0;
	for(int i=1;i<=n;i++){
		int x=i,p=0;;
		while(x&&!p){
			switch (x%10) {
			case 2:
				p=1;
				break;
			case 0:
				p=1;
				break;
			case 1:
				p=1;
				break;
			case 9:
				p=1;
				break;
			}
			x/=10;
		}
		if(p)s+=i;
	}
	cout<<s;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
等差数列

在这里插入图片描述
排序后可以得出公差d=min(d,a[i]-a[i-1])

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void slove(){
	int n;
	cin>>n;
	vector<ll>a(n);
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a.begin(),a.end());
	ll d=0x7ffffff;
	for(int i=1;i<n;i++){
		d=min(d,a[i]-a[i-1]);
	}
	if(d==0)cout<<n;
	else cout<<(a[n-1]-a[0])/d+1;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
灵能传输

在这里插入图片描述
在这里插入图片描述
对于a数组每次操作使得 (a[i-1],a[i],a[i+1) -> (a[i-1]+a[i],-a[i],a[i+1]+a[i])
对于a数组的前缀和数组s 每次操作使得 (s[i-1],s[i],s[i+1]) -> (s[i],s[i-1],s[i+1])
因为操作范围[2,n-1]所以对于前缀和数组s

可以任意交换除了s[0]和s[n]的任意一个元素

并且可以通过s[i]-s[i-1]得到a[i],最终答案即为 ans=max(ans,abs(s[i]-s[i-1]))
假设 s0为最小值sn为最大值
在这里插入图片描述
那么可以使得其变成
在这里插入图片描述
来减少abs(s[i]-s[i-1])
若 s0不为最小值sn不为最大值
在这里插入图片描述
则可变成s0先到达最小值sn先到达最大值后中间按顺序连上
在这里插入图片描述
若sn<s0则把sn当作s0,s0当作sn反向处理

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
#define int long long
int n;
int s[300005],res[300005];
bool vis[300005];
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x*f;
}
void slove(){
	n=read();
	s[0]=0;
	memset(vis,false,sizeof(vis));
	for(int i=1;i<=n;i++)s[i]=s[i-1]+read();
	int s0=s[0],sn=s[n];
	if(s0>sn)swap(s0,sn);
	int l=0,r=n;
	sort(s,s+1+n);
	for(int i=0;i<=n;i++)
		if(s0==s[i]){
			s0=i;
			break;
		}
	for(int i=n;i>=0;i--)
		if(sn==s[i]){
			sn=i;
			break;
		}
	for(int i=s0;i>=0;i-=2)res[l++]=s[i],vis[i]=true;
	for(int i=sn;i<=n;i+=2)res[r--]=s[i],vis[i]=true;
	for(int i=0;i<=n;i++)if(!vis[i])res[l++]=s[i];
	int ans=0;
	for(int i=1;i<=n;i++)ans=max(ans,abs(res[i]-res[i-1]));
	printf("%lld\n",ans);
}
signed main(){
	int T=1;
	T=read();
	while(T--){
		slove();
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值