2014多校联合-第六场
最近这两场好无奈啊。。。
今天这场最后30分钟敲1001,压力倍增,虽然思路比较明确,但是代码打起来不怎么容易。
但是还是好在25分钟左右debug结束。提交wa,再提交,依然WA.......最后5分钟,还是没有AC掉。
一开始以为是精度问题,后来才sb的发现原来数组开小了。
在压力环境下保证代码的效率和质量真不是一件容易的事情。不过数组开小了,真是不可原谅。
1001:Map
题目相当于几条链表。把链表排成几行。
然后枚举每一列的状态会被操作多少次。
然后把和累加起来,然后直接除以状态总数。
#include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include <map>
using namespace std;
#define LL long long
#define lcm(a,b) (a*b/gcd(a,b))
int su[1010][1100];
int a[10100];
int have[1010];
int pre[10100];
int next[11000];
vector<int>vec;
int maxlen;
int pan(int p,int t)
{int n=vec.size();for(int i=0;i<n;i++){if(t&(1<<i)){if(su[i][p]==0)return 0;}}return 1;
}
double use(int p,int t)
{int n=vec.size();int s,x,y;x=have[p];y=0;s=0;for(int i=0;i<n;i++){if(t&(1<<i)){y++;s+=a[su[i][p]];}}if(y>1){return 1.0*y*s/x+s;}else return s;
}
void dos()
{int n=vec.size();int t=1<<n;t--;double ans=0;double pp=1.0;for(int i=0;i<n;i++){pp*=1.0*(su[i][0]+1);}pp--;for(int i=1;i<=maxlen;i++){for(int j=1;j<=t;j++){if(pan(i,j)==0)continue;double sum=use(i,j);double ch=1.0;for(int k=0;k<n;k++){if(j&(1<<k)){ch*=1.0*(su[k][0]-i+1);}else{ch*=1.0*min((su[k][0]+1),i);}}ans+=sum*ch;}}printf("%.3f\n",ans/pp);
}
int main()
{int T,n,m;scanf("%d",&T);while(T--){memset(have,0,sizeof(have));memset(pre,0,sizeof(pre));memset(next,-1,sizeof(next));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}int u,v;while(m--){scanf("%d%d",&u,&v);u++;v++;pre[v]=u;next[u]=v;}vec.clear();for(int i=1;i<=n;i++){if(pre[i]==0)vec.push_back(i);}memset(su,0,sizeof(su));maxlen=0;for(int i=0;i<vec.size();i++){int k=1;for(int j=vec[i];j!=-1;j=next[j]){su[i][k]=j;have[k]++;k++;}su[i][0]=k-1;maxlen=max(maxlen,k-1);}dos();}return 0;
}
1003:Room and Moor
从前往后扫,如果不满足不下降,就把后面的合并到前面去,如果还不满足,继续合并。
最后算出结果即可。
#include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define eps 1e-9
#define zero(x) (fabs(x)<eps?0:x)
#define maxn 110000
struct list
{int x;int y;double f;int pre;
}p[maxn];
int a[maxn];
double su(int x,int y)
{return (1.0*x)/(1.0*x+1.0*y);
}
void dos(int n)
{p[0].f=0.0;p[0].pre=-1;p[0].x=0;p[0].y=0;for(int i=1;i<=n;i++){p[i].f=su(p[i].x,p[i].y);// cout<<i<<" "<<p[i].x<<" "<<p[i].y<<" "<<p[i].f<<endl;if(zero(p[i].f-p[i-1].f)>=0){p[i].pre=i-1;continue;}for(int j=i-1;j!=-1;j=p[j].pre){p[i].x+=p[j].x;p[i].y+=p[j].y;p[i].pre=p[j].pre;p[i].f=su(p[i].x,p[i].y);if(zero(p[i].f-p[p[i].pre].f)>=0)break;}}double sum=0.0;for(int i=n;i!=-1;i=p[i].pre){double ps=0;double f=p[i].f;ps+=f*f*1.0*p[i].y;f=1.0-f;ps+=f*f*1.0*p[i].x;sum+=ps;}printf("%.6f\n",sum);
}
int main()
{int T,n;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}int ls=0;int leap=1;for(int i=1;i<=n;i++){if(ls==0){if(a[i]==0)continue;else{ls++;p[ls].x=1;p[ls].y=0;continue;}}if(leap==a[i]){if(leap==0)p[ls].y++;else p[ls].x++;}else{leap=leap^1;if(leap==1){ls++;p[ls].x=0;p[ls].y=0;}i--;}// cout<<ls<<" "<<p[ls].x<<" "<<p[ls].y<<endl;}if(p[ls].y==0)ls--;// cout<<"__"<<ls<<endl;if(ls==0){printf("%.6f\n",1.0*ls);continue;}dos(ls);}return 0;
}
1005:Apple Tree
很明显可以发现,我们交叉放苹果和肥料是最优的,一共两种放法。
直接模拟一下就好。
1007:Series 1
脱脱的最后的系数是一个杨辉三角。然后+,-交替。
不过是大数sad,要用到java。。。
悲伤
import java.util.Scanner;
import java.math.*;public class Main {public static void main(String[] args) {Scanner cin = new Scanner(System.in);BigInteger[] bit = new BigInteger[3300];BigInteger ans,temp,sn;int i,cas,n,j,k;cas = cin.nextInt();for(i = 1;i <= cas;i ++){ans = BigInteger.ZERO;temp = BigInteger.ONE;n = cin.nextInt();sn = BigInteger.valueOf(n-1);for(j = 1;j <= n;j ++)bit[j] = cin.nextBigInteger();for(j = 0;j < n;j ++){if(j%2 == 0)ans = ans.add(temp.multiply(bit[n-j]));else ans = ans.subtract(temp.multiply(bit[n-j]));temp = temp.multiply(sn).divide(BigInteger.valueOf(j+1));sn = sn.subtract(BigInteger.ONE);}System.out.println(ans);}}
}
1010:Fighting the Landlords
这个题目就不吐槽了。。。
很明显一开始看错题了。。。
就是一个水的模拟题,不用理会。。。。
2014多校联合-第六场相关推荐
- 2014多校联合-第八场
1001:2048 很明显,一开始看错题了...sad 这题目我感觉挺卡时间的... dp[i][j]:在选择2^i的时候,选择的和为j*2^i到(j+1)*2^i-1时候的情况. #include ...
- 2014多校联合-第七场
1005: ( Stupid Tower Defense ) 由题意我们很明显可以知道,红色的塔放在最后面是最优的. 假如前i个塔,放j个绿塔,i-j个蓝塔.那么无论前i个塔的顺序怎么放,对后面的塔造 ...
- 2022湖南多校对抗赛第六场
2022湖南多校对抗赛第六场 队伍排名 第一 第二 第三 湖南大学1队 湖南大学4队 中南大学2队 团体成绩 取每个学校正式队伍前四名 学校 总题数 湖南大学 16 中南大学 16 国防科技大学 16 ...
- HDU 4868 Information Extraction(2014 多校联合第一场 H)
看到这道题时我的内心是奔溃的,没有了解过HTML,只能靠窝的渣渣英语一点一点翻译啊TT. Information Extraction 题意:(纯手工翻译,有些用词可能在html中不是一样的,还多包涵 ...
- HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)
磨了一天的线段树,不能说完全搞清楚,只能说有一个大概的了解,靠着模板才把这道题A了,只能说太弱~~! 题意: 初始时有一字符串,全为0. 三种操作: 1 k d - add 把d加到第k个数上去 2 ...
- 2019杭电暑假多校训练 第六场 Snowy Smile HDU - 6638
很多题解都是简单带过,所以打算自己写一篇,顺便也加深自己理解 前置知识:线段树.线段树维护最大字段和.二维坐标离散化 题解: 1.很容易想到我们需要枚举所有子矩阵来得到一个最大子矩阵,所以我们的任务是 ...
- hdu 4937 Lucky Number(数学题 进制转换)2014多校训练第7场
Lucky Number Time Limit: 20 ...
- HDU 5762 Teacher Bo (鸽笼原理) 2016杭电多校联合第三场
题目:传送门. 题意:平面上有n个点,问是否存在四个点 (A,B,C,D)(A<B,C<D,A≠CorB≠D)使得AB的横纵坐标差的绝对值的和等于CD的横纵坐标差的绝对值的和,n<1 ...
- 【河南省多校脸萌第六场 E】LLM找对象
[链接]点击打开链接 [题意] 在这里写题意 [题解] 把n个时间离散化一下. 对于不是相邻的点,在两者之间再加一个空格就好. 这样最多会有1000个位置. 则定义dp[i][k][j] 表示前i个数 ...
最新文章
- (DBA之路【五】)关于锁的故事
- EdoGantt甘特图中间件的事件对象
- java设计模式---备忘录模式
- mysql collation utf8_mysql数据库 表字段 的collation utf8_unicode_ci
- 易创课堂成都站给你寄来一包干货,请注意查收
- OllyDebug调试技巧(三)
- 再谈网游同步技术:实时动作游戏同步方式和传输协议选择
- Dubbo入门之hello world(zookeeper做注册中心)
- 用java完成一个模块_Java 9 揭秘(3. 创建你的第一个模块)
- 如何编写正确且高效的 OpenResty 应用
- 基于高德地图实现热力地图和标记点显示文字
- 爬取京东某商品评论并存入csv
- 关于传奇自动触发的几个常用脚本OnKillMob、StdModeFunc、等触发事件
- HTML CSS JS 特殊字符编码表
- 区块链知识系列 - App 与 DApp 的区别
- mybatis plus环境搭建及代码生成器
- 巡检路线排班问题matlab,对巡检线路的排班数学模型分析.doc
- 21考研,什么时候开始准备,越早越好吗?
- modbus通讯失败_STM32 MODBUS通讯失败
- 鸿蒙系统1007鸿蒙系统,1007 燃爆 | 华为“鸿蒙”真的来了!看完这些商标来历,网友们又激动了...
热门文章
- RNGUZI疑是玩电竞竞猜的APPO(∩_∩)O哈哈~APP?QQ是什么让他输?qun是放水吗?还是身体不适91435456?
- Django7-2.模板系统常用知识点(2)
- 室内设计计算机学什么软件,学习室内设计需要会用到哪些软件呢?
- 2020全国大学生数学建模竞赛赛题
- ai自动配音_自媒体免费配音神器,一键生成100条AI配音
- javascript匿名函数的各种执行形式
- 64只马,8个赛道,选出最快4只马
- qq群引流靠谱吗?为什么选择QQ引流?QQ引流好吗?
- fastadmin 使用switch 点击修改无反应 提示“未更新任何行”
- 普度网络营销策划_普度网络营销策划:中小企业线上营销沙龙成功举办