9.26 noip模拟试题
2016-09-26 21:06
363 查看
魔术球问题弱化版(ball.c/.cpp/.pas)
题目描述
假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的球。
(1)每次只能在某根柱子的最上面放球。
(2)在同一根柱子中,任何 2 个相邻球的编号之和为完全平方数。
试设计一个算法,计算出在 n 根柱子上最多能放多少个球。例如,在 4 根柱子上最多可放 11 个球。
对于给定的 n,计算在 n 根柱子上最多能放多少个球。
输入描述
第 1 行有 1 个正整数 n,表示柱子数。
输出描述
一行表示可以放的最大球数
4
样例输出。
样例输入
11
题目限制(为什么说弱化版就在这里)
N<=60,时限为3s;比起原题还有弱化在不用打出方案,方案太坑了
数据小,直接打表..
View Code
题目描述
假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的球。
(1)每次只能在某根柱子的最上面放球。
(2)在同一根柱子中,任何 2 个相邻球的编号之和为完全平方数。
试设计一个算法,计算出在 n 根柱子上最多能放多少个球。例如,在 4 根柱子上最多可放 11 个球。
对于给定的 n,计算在 n 根柱子上最多能放多少个球。
输入描述
第 1 行有 1 个正整数 n,表示柱子数。
输出描述
一行表示可以放的最大球数
4
样例输出。
样例输入
11
题目限制(为什么说弱化版就在这里)
N<=60,时限为3s;比起原题还有弱化在不用打出方案,方案太坑了
数据小,直接打表..
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #define maxn 10010 #define ll long long using namespace std; ll n,m,num1,num2,num,head1[maxn],head2[maxn],head[maxn],dis1[maxn],dis2[maxn],dis[maxn],f[maxn]; ll u[maxn*10],v[maxn*10],t1[maxn*10],t2[maxn*10]; queue<ll>q; struct node{ ll u,v,t,pre; }e1[maxn*10],e2[maxn*10],e[maxn*10]; ll init(){ ll x=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} return x*f; } void Add1(ll from,ll to,ll dis){ num1++;e1[num1].u=from; e1[num1].t=dis; e1[num1].v=to; e1[num1].pre=head1[from]; head1[from]=num1; } void Add2(ll from,ll to,ll dis){ num2++;e2[num2].u=from; e2[num2].t=dis; e2[num2].v=to; e2[num2].pre=head2[from]; head2[from]=num2; } void SPFA1(){ memset(dis1,127/3,sizeof(dis)); q.push(n);f =1;dis1 =0; while(!q.empty()){ int k=q.front(); q.pop();f[k]=0; for(int i=head1[k];i;i=e1[i].pre){ int v=e1[i].v; if(dis1[v]>dis1[k]+e1[i].t){ dis1[v]=dis1[k]+e1[i].t; if(f[v]==0){ f[v]=1;q.push(v); } } } } } void SPFA2(){ memset(f,0,sizeof(f)); memset(dis2,127/3,sizeof(dis)); while(!q.empty())q.pop(); q.push(n);f =1;dis2 =0; while(!q.empty()){ int k=q.front(); q.pop();f[k]=0; for(int i=head2[k];i;i=e2[i].pre){ int v=e2[i].v; if(dis2[v]>dis2[k]+e2[i].t){ dis2[v]=dis2[k]+e2[i].t; if(f[v]==0){ f[v]=1;q.push(v); } } } } } ll Solve(){ memset(f,0,sizeof(f)); memset(dis,127/3,sizeof(dis)); while(!q.empty())q.pop(); q.push(1);f[1]=1;dis[1]=0; while(!q.empty()){ int k=q.front(); q.pop();f[k]=0; for(int i=head[k];i;i=e[i].pre){ int v=e[i].v; if(dis[v]>dis[k]+e[i].t){ dis[v]=dis[k]+e[i].t; if(f[v]==0){ f[v]=1;q.push(v); } } } } return dis ; } int main() { freopen("gpsduel.in","r",stdin); freopen("gpsduel.out","w",stdout); n=init();m=init(); for(ll i=1;i<=m;i++){ u[i]=init();v[i]=init();t1[i]=init();t2[i]=init(); Add1(v[i],u[i],t1[i]);Add2(v[i],u[i],t2[i]); } SPFA1(); SPFA2(); for(ll i=1;i<=m;i++){ e[i].v=v[i];e[i].pre=head[u[i]];head[u[i]]=i; if(dis1[v[i]]+t1[i]>dis1[u[i]])e[i].t++; if(dis2[v[i]]+t2[i]>dis2[u[i]])e[i].t++; } cout<<Solve()<<endl; return 0; }
View Code
相关文章推荐
- 10.5 noip模拟试题
- 10.7 noip模拟试题
- 10.8 noip模拟试题
- 2016.7.15 NOIP2014模拟试题解题报告(又名:方克顺和他的正余弦朋友们(
- jzoj 3076. 【备战NOIP2012图论专项模拟试题】位图
- NOIP2011-普及组复赛模拟试题-第二题-买票
- 10.27 noip模拟试题
- JZOJ5390. 【NOIP2017提高A组模拟9.26】逗气
- JZOJ 5390. 【NOIP2017提高A组模拟9.26】逗气
- 9.30 noip模拟试题
- CCF-NOIP-2018 提高组(复赛) 模拟试题(三)
- CCF-NOIP-2018 提高组(复赛) 模拟试题(九)(2018 CSYZ长沙一中)
- 【备战NOIP2012图论专项模拟试题】位图
- 【jzoj5389】【NOIP2017提高A组模拟9.26】【解梦】
- 3076. 【备战NOIP2012图论专项模拟试题】位图 (Standard IO)
- 9.20 noip模拟试题
- (NOIP2015)复赛模拟试题 vijos1165 火烧赤壁
- 【备战NOIP2012图论专项模拟试题】外星人入侵
- JZOJ5390. 【NOIP2017提高A组模拟9.26】逗气 单调队列
- 3077. 【备战NOIP2012图论专项模拟试题】外星人入侵 (Standard IO)