当前位置:网站首页>Game mathematical derivation AC code (high precision and low precision multiplication and division comparison) + 60 code (long long) + 20 point code (Full Permutation + deep search DFS)
Game mathematical derivation AC code (high precision and low precision multiplication and division comparison) + 60 code (long long) + 20 point code (Full Permutation + deep search DFS)
2020-11-08 07:14:00 【osc_56801rv0】
NOIP 2012 Improvement group The rematch The first day The second question is King's game game Mathematical derivation AC Code ( High precision Low precision ride except Compare )+60 Code (long long)+20 Code division ( Full Permutation + Deep search dfs)
For the general catalogue, please refer to :NOIP Improvement group The rematch test questions Catalog Xinao Calendar year
Online evaluation address :https://www.luogu.com.cn/problem/P1080
The mathematical derivation is as follows :
We analyze the two points behind the king
The queue might look like this :
* | Left | Right |
---|---|---|
king: | a0 | b0 |
p1 | a1 | b1 |
p2 | a2 | b2 |
So we can calculate that ans1=max(a0/b1,a0*a1/b2)
The queue could be like this
* | Left | Right |
---|---|---|
king: | a0 | b0 |
p2 | a2 | b2 |
p1 | a1 | b1 |
So we can calculate that ans2=max(a0/b2,a0*a2/b1)
consider ans1 The optimal , that ans1<ans2,
Please note that :
(ans1 Medium )a0/b1<(ans2 Medium )a0*a2/b1
(ans1 Medium )a0*a1/b2>(ans2 Medium )a0/b2
Make sure that ans1<ans2 It must be true , must (ans1 Medium )a0*a1/b2<(ans2 Medium )a0*a2/b1
namely a1/b2<a2/b1
namely a1*b1<a2*b2
namely , Press a*b Sort from small to large , It can be guaranteed that it is the optimal solution to the problem .
In terms of success rate , It's still highly recommended 60 Code division .
Provide a set of test data
Input :
5
9999 1
9999 1
9999 2
9999 3
9999 4
9999 5
Output :
19990001999800009999
1.AC Code ( High precision Low precision ride except Compare )
#include <bits/stdc++.h>
#define maxn 1010
#define BASE 10000
using namespace std;
int n,aa[maxn],an,bb[maxn],bn,cc[maxn],cn;
struct node{
int a,b,c;
}q[maxn];
int cmp(node a,node b){
return a.c<b.c;
}
void mul(int x){// High precision * Low precision
int i;
for(i=1;i<=an;i++)
aa[i]=aa[i]*x;
for(i=1;i<=an;i++){
aa[i+1]+=aa[i]/BASE;
aa[i]%=BASE;
}
//if(aa[an+1])an++; You can also write this sentence , But I don't think it's right
while(aa[an+1])an++,aa[an+1]+=aa[an]/BASE,aa[an]%=BASE;
}
void div(int x){// High precision / Low precision
int i,yu;
yu=0;
for(i=an;i>=1;i--){
bb[i]=(aa[i]+yu*BASE)/x;
yu=(aa[i]+yu*BASE)%x;
}
bn=an;
while(!bb[bn])bn--;// Remove the lead 0
}
int compare(){
if(bn>cn)return 1;//bb>cc
if(bn<cn)return -1;//bb<cc
for(int i=bn;i>=1;i--)//bb==cc
if(bb[i]>cc[i])return 1;//bb>cc
else if(bb[i]<cc[i])return -1;//bb<cc
return 0;//bb==cc
}
int main(){
int i,j;
scanf("%d",&n);
for(i=0;i<=n;i++)scanf("%d%d",&q[i].a,&q[i].b),q[i].c=q[i].a*q[i].b;
sort(q+1,q+1+n,cmp);
aa[1]=1,an=1;
cc[1]=q[0].a/q[1].b,cn=1;
for(i=1;i<=n;i++){
mul(q[i-1].a);
div(q[i].b);
if(compare()==1){
cn=bn;
for(j=bn;j>=1;j--)cc[j]=bb[j];
}
}
printf("%d",cc[cn]);
for(i=cn-1;i>=1;i--)printf("%04d",cc[i]);
return 0;
}
2.60 Code (long long)
#include <bits/stdc++.h>
#define LL long long
#define maxn 1100
using namespace std;
struct node{
LL a,b,c;
}q[maxn];
int cmp(node a,node b){
return a.c<b.c;
}
LL mx,a=1;
int main(){
int n,i;
scanf("%d",&n);
for(i=0;i<=n;i++){
scanf("%d%d",&q[i].a,&q[i].b);
q[i].c=q[i].a*q[i].b;
}
sort(q+1,q+1+n,cmp);
for(i=1;i<=n;i++)
a*=q[i-1].a,mx=max(mx,a/q[i].b);
printf("%lld\n",mx);
return 0;
}
3.20 Code division ( Full Permutation + Deep search dfs)
20 Code division ( Full Permutation + Deep search dfs) as follows :
#include <bits/stdc++.h>
using namespace std;
int a[15],b[15],c[15],vis[15],n,mn=2000000000;
void dfs(int step){
int i;
if(step==n+1){
int j,aa=1,mx=0;
for(j=1;j<=n;j++){
aa=aa*a[c[j-1]];
mx=max(mx,aa/b[c[j]]);
}
mn=min(mx,mn);
return;
}
for(i=1;i<=n;i++)
if(!vis[i]){
vis[i]=1;
c[step]=i;
dfs(step+1);
vis[i]=0;
}
}
int main(){
int i;
scanf("%d",&n);
for(i=0;i<=n;i++)scanf("%d%d",&a[i],&b[i]);
dfs(1);
printf("%d\n",mn);
return 0;
}
版权声明
本文为[osc_56801rv0]所创,转载请带上原文链接,感谢
边栏推荐
- 16. File transfer protocol, vsftpd service
- Face recognition: attack types and anti spoofing techniques
- c# 表达式树(一)
- High concurrency in ngnix cluster
- ulab 1.0.0发布
- Do you really understand the high concurrency?
- golang 匿名结构体成员,具名结构体成员,继承,组合
- Got timeout reading communication packets解决方法
- Wechat nickname Emoji expression, special expression causes the list not to be displayed, export excel error report and other problems solved!
- On the stock trading of leetcode
猜你喜欢
LadonGo开源全平台渗透扫描器框架
Macquarie Bank drives digital transformation with datastex enterprise (DSE)
Qt混合Python开发技术:Python介绍、混合过程和Demo
iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】
VC6 compatibility and open file crash resolution
The real-time display of CPU and memory utilization rate by Ubuntu
QT hybrid Python development technology: Python introduction, hybrid process and demo
Ladongo open source full platform penetration scanner framework
学习Scala IF…ELSE 语句
laravel8更新之速率限制改进
随机推荐
Visual Studio 2015 未响应/已停止工作的问题解决
CPP (3) what is cmake
Interface
你的主机中的软件中止了一个已建立的连接。解决方法
【原创】关于高版本poi autoSizeColumn方法异常的情况
归纳一些比较好用的函数
什么你的电脑太渣?这几招包你搞定! (Win10优化教程)
Macquarie Bank drives digital transformation with datastex enterprise (DSE)
Web Security (3) -- CSRF attack
CPP (2) creating CPP project
leetcode之判断路径是否相交
Ladongo open source full platform penetration scanner framework
16.文件传输协议、vsftpd服务
The most detailed usage guide for perconaxtradbcluster8.0
iOS上传App Store报错:this action cannot be completed -22421 解决方案
Judging whether paths intersect or not by leetcode
The software in your host has terminated an established connection. resolvent
Data transmission of asynchronous serial communication controlled by group bus communication
Mouse small hand
VC6 compatibility and open file crash resolution