【G】机器人
机器人
https://ac.nowcoder.com/acm/contest/9986/G
G.机器人
此题与一道经典题国王游戏很类似
假设现在只有俩组a和b,要使最后得到的结果是最大的,那么只有俩种情况
假设ans1>ans2
可得
根据这个关系我们就可以进行排序了,此题数据量小,因此可以直接使用冒泡排序
#include<bits/stdc++.h>
#define up_b upper_bound
#define low_b lower_bound
#define ll long long
#define m_p make_pair
#define mem(a) memset(a,0,sizeof(a))
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define INF 0x3f3f3f3f
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
const ll mod=1e9+7;
using namespace std;
const int maxn=1e5+5;
struct node{int a,b,c;}num[25],f;
long long read()
{
long long x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
ll qpow(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1) ans=(ans*a)%mod;
a=(a*a)%mod;
b/=2;
}
return ans;
}
__int128 ans;
void print(__int128 x)
{
if(!x)
{
puts("0");
return ;
}
string ret="";
while(x)
{
ret+=x%10+'0';
x/=10;
}
reverse(ret.begin(),ret.end());
cout<<ret<<endl;
}
int main()
{
//int _;_=read();while(_--)
int n=read(),x=read();
ans=x;
rep(i,1,n)
{
num[i].a=read(),num[i].b=read();
//num[i].c=num[i].b/(1-num[i].a);
}
//sort(num+1,num+1+n,cmp);
rep(i,1,n)
{
rep(j,1,n)
{
if(num[j].a*num[i].b+num[j].b>num[i].a*num[j].b+num[i].b)
{
f.a=num[j].a,f.b=num[j].b;
num[j].a=num[i].a,num[j].b=num[i].b;
num[i].a=f.a,num[i].b=f.b;
}
}
}
rep(i,1,n)
{
ans=ans*num[i].a+num[i].b;
}
print(ans);
}
