A. Rudolf and the Ticket
关键句,直接枚举所有可能
#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define fr first
#define se second
#define endl '\n'
using namespace std;
void solve(){
int n,m,k;
cin>>n>>m>>k;
int b[n+1];
per(i,1,n)cin>>b[i];
int c[m+1];
per(i,1,m)cin>>c[i];
//bf + cs <=k
int ans=0;
per(i,1,n){
per(j,1,m){
if(b[i]+c[j]<=k)ans++;
}
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
int t=1;
cin>>t;
while(t--)solve();
return 0;
}
B - Rudolf and 121
你可以对序列进行的操作如下(可以进行0次或者无数次)
问你最后是否可以将序列全部变成0
这个操作考虑起来可能会有点麻烦,我们转变一下就是第一个数减1,第二个数减2,第三个数减1
然后循环判断就可以了,注意不能一个一个去减,因为要减到0(模拟的话就要TLE了),所以a[i]本身是要直接变成0的。也就是直接减a[i]的值。
#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5;
int a[N],n;
void solve(){
cin>>n;
per(i,1,n)cin>>a[i];
//中间的减二 两边的减一
//a[i]--,a[i+1]-2,a[i+2]-1
per(i,1,n-2){
if(a[i]*2<=a[i+1] and a[i]<=a[i+2]){
a[i+1]-=a[i]*2;
a[i+2]-=a[i];
}else{
cout<<"NO"<<endl;