社区讨论
高精的悲伤
P1080[NOIP 2012 提高组] 国王游戏参与者 5已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi7yvmx9
- 此快照首次捕获于
- 2025/11/21 05:52 4 个月前
- 此快照最后确认于
- 2025/11/21 05:52 4 个月前
高精和不高精都是60,求大佬指点TAT
CPP#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll unsigned long long
using namespace std;
struct node{
int a,b;
ll w;
}t[1001];
bool cmp(node x,node y){return x.w<y.w;}
int len=1,lenn=0;
int ans[10001],anss[10001],c[10001];
void gc(int x){
for(int i=1;i<=len;i++)
ans[i]*=t[x].a;
for(int i=1;i<=len;i++){
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
if(ans[len+1]) len++;
}
void gchu(int x){
int r=0;
for(int i=len;i>=1;i--){
int d=r*10+ans[i];
ans[i]=d/t[x].b;
r=d%t[x].b;
}
while(ans[len]==0&&len>1) len--;
}
int main(){
int n,gl,gr;
cin>>n>>gl>>gr;
for(int i=1;i<=n;i++){
cin>>t[i].a>>t[i].b;
t[i].w=t[i].a*t[i].b;
}
sort(t+1,t+n+1,cmp);
ans[1]=1;
for(int i=1;i<=len;i++)
ans[i]*=gl;
for(int i=1;i<=len;i++){
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
if(ans[len+1]) len++;
for(int i=1;i<=n;i++){
gchu(i);
//cout<<len<<" ";
if(len>lenn){
lenn=len;
for(int j=1;j<=lenn;j++)
anss[j]=ans[j];
}
else{
if(len==lenn){
for(int j=lenn;j>=1;j--){
if(anss[j]>ans[j]) break;
if(anss[j]==ans[j]) continue;
if(anss[j]<ans[j]){
for(int z=1;z<=lenn;z++)
anss[z]=ans[z];
break;
}
}
}
}
for(int j=1;j<=len;j++)
ans[j]*=t[i].b;
for(int j=1;j<=len;j++){
ans[j+1]+=ans[j]/10;
ans[j]%=10;
}
if(ans[len+1]) len++;
gc(i);
}
if(lenn==1&&anss[lenn]==0) anss[lenn]=1;
for(int i=lenn;i>=1;i--) cout<<anss[i];
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...