这场比赛怎么说呢,一开始打的还算好,能进前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";
else
cout<<"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;
}