【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); }