CodeForces-1461E-Water Level
程序员文章站
2024-01-02 12:55:10
题目大意:思路:每一天的开始,可以加y升的水,每一天一定会用x升的水,需要保证每时每刻水量都在[l,r]。如果x=y:那么只要k-x>=l||k+x<=r,可以让水量一直维持在k(k∈[l,r])。如果x=t就输出Yes如果x>y:那么就可以模拟这个过程,并且记录变量...
题目大意:
思路:
每一天的开始,可以加y升的水,每一天一定会用x升的水,需要保证每时每刻水量都在[l,r]。
如果x=y:那么只要k-x>=l||k+x<=r,可以让水量一直维持在k(k∈[l,r])。
如果x<y:那么k一定会不断减小。对于第一天,需要考虑是否可以加y升水。而之后第i天一定会减少x升水,第i+1天一定可以加入y升水,相当于一天减少delt=x-y升水。然后计算出维持的天数tot,如果tot>=t就输出Yes
如果x>y:那么就可以模拟这个过程,并且记录变量k是否到达过当前的值,一旦到达说明存在一个循环且该循环所有位置都处于[l,r]中,可以直接输出Yes。对于k,可以不断减少x,直到无法减少,此后一定可以再加y,再次减少x。每一次t-=(k-l)/x,k=k-(k-l)/x。一旦t<=0就输出Yes。用mp[]来记录k的轨迹,一旦出现mp[k]=1就到达了上述的循环。k减到无法再减x时候,k就应该加y,注意此时当天k一定要减少x。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll k,l,r,t,x,y;
map<ll,int>mp;
int main(){
cin>>k>>l>>r>>t>>x>>y;
if(x==y){
if(k+y<=r||k-y>=l)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}
else if(x>y){
ll delt=x-y,tot=0;
if(k+y<=r)k+=y;
if(k-x>=l){
k-=x,tot++;
tot=tot+(k-l)/delt;
}
if(tot>=t)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}
else{
ll sign=0;
while(1){
t-=(k-l)/x;
k=k-(k-l)/x*x;
if(t<=0){
cout<<"Yes"<<endl;
return 0;
}
if(mp[k]){
sign=1;
cout<<"Yes"<<endl;
return 0;
}
mp[k]=1;
if(k+y<=r)k+=y;
k-=x;t--;
if(k<l||k>r)break;
}
cout<<"No"<<endl;
}
return 0;
}
本文地址:https://blog.csdn.net/Phoenix_ZengHao/article/details/111075146
推荐阅读
-
CodeForces-1461E-Water Level
-
解决Fatal error: Maximum function nesting level of ’100′ reached报错
-
MySQL的transaction level对django的影响
-
hbase write flow(byte level)
-
将Reporting services的RDL文件拷贝到另外一台机器时报Data at the root level is invalid的解决方法
-
将Reporting services的RDL文件拷贝到另外一台机器时报Data at the root level is invalid的解决方法
-
SpringBoot:Java High Level REST Client 搜索 API
-
nginx: [warn] "log_format" directive used only on "http" level 解决方法
-
AS报错:lambda expressions are not supported at this language level
-
Flash AS3教程:Level2D类