分都要挂没了

image
所以有人帮忙调调吗:
T2:

#define Code using
#define by namespace
#define stringdp100005 std
#include<bits/stdc++.h>
#define int long long
Code by stringdp100005;
int n,c,t;
int a[1000005];
bool check(int x){
	int sum=0,cnt=0;
	for(int i=1;i<=n;i++){
		sum+=a[i];
		if(sum>=x) sum=0,cnt++;
	}
	if(sum!=0) cnt++;
	return cnt>=c;
}
signed main(){
	cin>>n>>c>>t;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++) a[i]=(a[i]+t-1)/t;
	int l=1,r=1e18; 
	while(l<r){
		int mid=(l+r+1)/2;
		if(check(mid)) l=mid;
		else r=mid-1;
	}
	cout<<l;
	return 0;
}

T3:

#define Code using
#define by namespace
#define stringdp100005 std
#include<bits/stdc++.h>
#define int long long
Code by stringdp100005;
int n;
string s;
int cnt0,cnt1,cnt2;
signed main(){
	cin>>n>>s;
	s='$'+s;
	for(int i=1;i<=n;i++){
		if(s[i]=='0') cnt0++;
		if(s[i]=='1') cnt1++;
		if(s[i]=='2') cnt2++;
	}
	cnt0=n/3-cnt0;cnt1=n/3-cnt1;cnt2=n/3-cnt2;
	for(int i=1,j=1;i<=cnt0;j++){
		if(s[j]!='0') 
			s[j]='0',i++;
	}
	for(int i=n,j=n;i>=n-cnt2+1;j--){
		if(s[j]!='2')
			s[j]='2',i--;
	}
	cnt0=cnt1=cnt2=0;
	for(int i=1;i<=n;i++){
		if(s[i]=='0') cnt0++;
		if(s[i]=='1') cnt1++;
		if(s[i]=='2') cnt2++;
	}
	cnt0=n/3-cnt0;cnt1=n/3-cnt1;cnt2=n/3-cnt2;
	for(int i=n,j=n;i>=n-cnt1+1;j--){
		if(s[j]=='0')
			s[j]='1',i--;
	}
	for(int i=1;i<=n;i++) cout<<s[i];
	return 0;
}

T4(没过样例,最后 3 分钟交上去的):

#define Code using
#define by namespace
#define stringdp100005 std
#include<bits/stdc++.h>
#define int long long
Code by stringdp100005;
int n,k,ans;
int dp[1005][2005][4];
/*
0:0 0
1:0 1
2:1 0
3:1 1 
*/
const int mod=998244353;
signed main(){
	cin>>n>>k;
	dp[1][1][0]=dp[1][1][3]=dp[1][2][1]=dp[1][2][2]=1;
	for(int i=2;i<=n;i++){ 
		for(int j=1;j<=min(2*i,k);j++){
			dp[i][j][0]=(dp[i-1][j][0]+dp[i-1][j][1]+dp[i-1][j][2]+dp[i-1][j-1][3])%mod;
			dp[i][j][1]=(dp[i-1][j-1][0]+dp[i-1][j][1]+dp[i-1][j-2][2]+dp[i-1][j][3])%mod;
			dp[i][j][2]=(dp[i-1][j-1][0]+dp[i-1][j-2][1]+dp[i-1][j][2]+dp[i-1][j][3])%mod;
			dp[i][j][3]=(dp[i-1][j-1][0]+dp[i-1][j][1]+dp[i-1][j][2]+dp[i-1][j][3])%mod;
		}
	}
	for(int i=0;i<4;i++) ans=(ans+dp[n][k][i])%mod;
	cout<<ans;
	return 0;
}

注:这是个求助帖,有没有巨佬帮忙调调

我的T2T3也没对……

T4:首先dp[i][j][1]=(dp[i-1][j-1][0]+dp[i-1][j][1]+dp[i-1][j-2][2]+dp[i-1][j-1][3])%mod;
因为如果上位是两个都填满了(应该是你三的情况),那该位的联通块个数+1,因此dp[i-1][j-1][3],而不是dp[i-1][j][3]
dp[i][j][2]同理。
其次,mod是1e9的规模这样写会爆int

我试了一下,样例过了

T2《int r=1e18;》