A
倒过来输出。
B
对于每一个正数,计算出前面所有负数的和,如果这个正数不够用,答案加上正数减和的值。感觉不是很好解释,看代码吧。
#include<bits/stdc++.h>
#define int long long
#define N 100015
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define inf 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define lowbit(i) ((i)&(-i))
#define VI vector<int>
using namespace std;
int t,n,a[N];
signed main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>t;
while(t--){
cin>>n;
int sum = 0,ans = 0;
rep(i,1,n) cin>>a[i];
reverse(a+1,a+n+1);
rep(i,1,n){
if(a[i] > 0){
if(a[i] > sum) ans += a[i]-sum,sum = 0;
else sum -= a[i];
}else sum += -a[i];
}
cout << ans << endl;
}
return 0;
}
C
注意到对于所有 i i i, s [ i ] = = s [ i + k ] s[i] == s[i+k] s[i]==s[i+k],先处理出这一部分,看是否有矛盾,如果没有,看前 k k k个是否合法。
#include<bits/stdc++.h>
#define ll long long
#define N 300015
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define inf 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define lowbit(i) ((i)&(-i))
#define VI vector<int>
using namespace std;
int t,n,k,val[N];
char s[N];
void solve(){
scanf("%d%d",&n,&k);
scanf("%s",s+1);
rep(i,1,n-k) if (s[i]!='?' && s[i+k]!='?' && s[i]!=s[i+k]) {
puts("NO"); return;}
rep(i,1,n-k) if (s[i]!=