这场比赛怎么说呢,一开始打的还算好,能进前1000,但是后面就被卡住了,这个确实没办法水平还是不够,学过的还是没想起来,后面继续练
A. Soccer
题解:水题一个,想要在过程中出现平局的情况,只要两人的得分不存在大小交换(就是说一开始一队分高,后面二队分高)这种情况,就有可能会没有比分相平的情况
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int a,b,c,d;
signed main()
{cin>>t;while(t--){cin>>a>>b>>c>>d;if((a>b&&c>d)||(a<b&&c<d))cout<<"YES"<<"\n";elsecout<<"NO"<<"\n";}return 0;
}
B. Collatz Conjecture
题解:很轻松的模拟题,也就模拟了40分钟吧,真是太抽象了,一开始被时间卡了
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int x,y,k;
signed main()
{cin>>t;while(t--){cin>>x>>y>>k;bool f=false;while(k>0&&x>1){int cnt=x%y;int res=y-cnt;if(res>k){x+=k;f=true;break;}k-=res;x+=res;while(x%y==0){x/=y;}}if(f==true) cout<<x<<endl;else{x+=k%(y-1);cout<<x<<endl;}}return 0;
}
C. Boring Day
这就是一个双端队列,从前往后遍历一遍,找到连续能够在区间内的就过了
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int a[100005];
int n,l,r;
deque<int> q;
int ans=0;
int cnt=0;
signed main()
{cin>>t;while(t--){ans=0;cnt=0;cin>>n>>l>>r;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){q.push_back(a[i]);ans+=a[i];if(ans>=l&&ans<=r){cnt++;q.clear();ans=0;}else{while(ans>r){int z=q.front();q.pop_front();ans-=z;}if(ans>=l&&ans<=r){cnt++;q.clear();ans=0;}}}q.clear();cout<<cnt<<"\n"; }return 0;
}