23.11.19周报

11号每日三题:

A题:

题意:自行理解

思路:比较简单,只是特判需要注意

代码如下:

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;

const int N=3e5+10;
const int mod=998244353;
struct nod{
	int d,h;
}b[1100];
int n,x;
int ma1,ma2;
void solve(){
	ma1=ma2=0;
	cin >> n >> x;
	bool iff=0;
	for(int i=1;i<=n;i++){
		cin >> b[i].d >> b[i].h;
		if(b[i].d>b[i].h || b[i].d>=x) iff=1;
		ma1=max(b[i].d,ma1);
		ma2=max(b[i].d-b[i].h,ma2);
	}
	if(!iff){cout << -1 << endl; return ;}
	if(ma2==0){cout << 1 << endl; return ;}
//	cout << ma1 << " " << ma2 << endl;
	int lef=max(x-ma1,0);
	int ans=lef/ma2+1;
//	cout << lef << " " << ans << endl;
	if(lef%ma2) cout << ans+1 << endl;
	else cout << ans << endl;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t=1;
	cin >> t;
	while(t--) solve();
	return 0;
}
//make it count
//开ll plz

B题:

题意:

星期二学了二叉树的非递归的前中后遍历(问就是数据结构作业。

星期三决定学习下dp,一直是我的薄弱点。

一道基础dp(我知道很基础):

星期四做了道之前三题的a题:

题意:自行理解

思路:无需多言

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;

const int N=2e5+10,M=1e9+10;
const int mod=998244353;
int n,h;
int p[N];
int ans;
void solve(){
	ans=0;
	cin >> h >> n;
	for(int i=1;i<=n;i++){
		cin >> p[i];
	}
	p[n+1]=0;
	for(int i=1;i<=n-1;i++){
		if(p[i+1]-p[i+2]!=1){
			ans++;
		}else{
			i++;
		}
	}
	
	cout << ans << endl;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t=1;
	cin >> t;
	while(t--) solve();
	return 0;
}
//make it count
//开ll plz

星期五每日三题:

a题:

题意:自行理解

思路:思路是网上看的,我只负责了代码实现,但tle,插个眼先(补:不开ll见祖宗,拖了我一个小时,心态炸裂)

代码如下:

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;

const int N=2e5+10,M=1e9+10;
const int mod=998244353;
ll n;
ll l,r,idx,tmp;
void solve(){
	idx=0,tmp=0;
	bool iff=0;
	cin >> n >> l >> r;
	if(r==n*(n-1)+1){
		if(l==r){
			cout << 1 << endl;
			return ;
		}
		iff=1,r--;
	}
	for(int i=1;i<n;i++){
		idx+=(n-i)*2;
		if(idx>=l){
			for(int j=l;j<=r;j++){//原来是没开ll导致的
				if(j>idx){
					tmp=idx;
					idx+=(n-++i)*2;
				}
				if(j&1) cout << i << " ";
				else{
					cout << i+(j-tmp)/2 << " ";
				}
			}
			break;
		}
		tmp=idx;
	}
	if(iff) cout << 1;
	cout << endl;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t=1;
	cin >> t;
	while(t--) solve();
	return 0;
}
//make it count
//开ll plz

星期五晚打了场div3,被狠狠地拿下了,补几道题:

B题:

题意:自行理解

思路:前缀和,但我当时不到怎么回事,想成树状数组做的,属于是脑子抽了

代码:

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;

const int N=2e5+10,M=1e9+10;
const int mod=998244353;
int n;
ll a[N];
ll ans;
void solve(){
	memset(a,0,sizeof(a));
	ans=0;
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		a[i]+=a[i-1];
	}
	for(int i=1;i<=n/2;i++){
		if(n%i) continue;
		ll maxx=0,minn=LONG_LONG_MAX;
		for(int j=i;j<=n;j+=i){
			maxx=max(1ll*a[j]-a[j-i],maxx);
			minn=min(1ll*a[j]-a[j-i],minn);
		}
		ans=max(maxx-minn,ans);
		if(ans==0){cout << 0 << endl; return ;}
	}
	cout << ans << endl;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t=1;
	cin >> t;
	while(t--) solve();
	return 0;
}
//make it count
//开ll plz

C题:

题意:最大子串和,但同奇偶性的俩元素不联通

思路:经典dp,小变一下就ok。比赛时没过,可能是因为脑抽开了个vector存不联通下标,为什么不直接实时判断呢,为什么呢?

代码:

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;

const int N=2e5+10,M=1e9+10;
const int mod=998244353;
int n;
int a[N];
int dp[N];
int ans;
void solve(){
//	for(int i=0;i<=n;i++) dp[i]=INT_MIN;
	ans=INT_MIN;
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		dp[i]=a[i];
	}
	for(int i=1;i<=n;i++){
		if((a[i]&1)==(a[i-1]&1)) dp[i]=a[i];
		else dp[i]=max(a[i],a[i]+dp[i-1]);
	}
	for(int i=1;i<=n;i++) ans=max(dp[i],ans);
	cout << ans << endl;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t=1;
	cin >> t;
	while(t--) solve();
	return 0;
}
//make it count
//开ll plz

周日:

今天英雄联盟s13总决赛,wbg被t1零封拿下,虽然已经做好了输的准备,但输的如此彻底,还是有点难受。

星期六的每日三题:

题意:给一数n,坐标轴上有0到n+1的城镇,每座镇有1 /2的几率建一座信号塔,功率为p(自定),能辐射到自己和左右两边坐标差小于p的城镇。要求0和n+1这俩镇不能有信号,1到n有且仅有一次信号覆盖,问其可能性。

思路:没思路。上网看发现是dp,dp完后能发现是斐波那契数列的规律。

设dp[i]为有i座城镇时的可行方案数,如果第i座城镇建一p为1的信号塔,那么dp[i]为dp[i-1],如果第i座城镇是被i-1的信号覆盖,那么i-1的信号将覆盖i-2和i,dp[i]+=dp[i-3]

由此可得dp[i]=dp[i-1]+dp[i-3]+dp[i-5]...至于怎么进一步推出斐波那契,就不明白了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值