Wannafly挑战赛3
给你一个长 n 的序列,m 次查询
每次查询给一个 x,然后:
从序列的最左端 1 开始,每次随机的选择一个右端点 r,如果两个端点间的区间和不超过 x ,就进行一次分割,然后把左端点变成 r + 1, 否则一直随机下去。
问这样分割出来的期望段数
输入描述:
第一行两个数 n,m之后一行 n 个数表示这个序列之后m行每行一个数 x,表示求每段的和不大于 x 的情况下切割的期望段数
输出描述:
m 行,每行一个保留到小数点后2位的数表示答案如果无论如何都没有合法的切割方案,输出"YNOI is good OI!",不含引号
输入
5 6 1 2 3 4 5 4 5 6 7 8 9
输出
YNOI is good OI! 4.25 3.83 3.58 3.58 3.11
说明
对于30%的数据,n , m <= 10对于60%的数据,n <= 1000 , m <= 10对于80%的数据,n <= 100000 , m <= 100对于100%的数据,n <= 100000 , m <= 500 , 0 <= a[i] <= 1000 , x <= 1000000 看了好久才知道题意。。。就是把n个数分段,要求每一段的区间和小于等于x,然后求一下期望段数
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=1e5+88; int a[N],sum[N],n,m,x; double dp[N],Sum[N]; int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;++i) {scanf("%d",a+i);sum[i]=a[i]+sum[i-1];}while(m--){bool ok=1;scanf("%d",&x);int pos=n;for(int i=n;i>=1;--i) {if(a[i]>x) {ok=0;break;}else {while(sum[i-1]+x<sum[pos]) --pos;double shu=pos-i+1;dp[i]=(Sum[i+1]-Sum[pos+2])/shu+1;}Sum[i]=Sum[i+1]+dp[i];}if(!ok) puts("YNOI is good OI!");else printf("%.2f\n",dp[1]);} }
题目描述
输入描述:
第一行读入一个正整数 n (1 <= n <= 105)。
第二行读入 n 个非负整数,第 i 个表示a[i] (0 <= a[i] <= 108)。
输出描述:
一行表示答案。
输入
10 0 1 2 3 4 5 6 7 8 9
输出
20
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1e5+88; int sum[N],n,a[N],san[N],b[N]; long long s[15]; void add(int p){for(;p<=n+55;p+=(p&(-p))) ++sum[p]; } int query(int p){int ans=0;for(;p;p-=(p&(-p))) ans+=sum[p];return ans; } int main(){long long ans=0;scanf("%d",&n);for(int i=1;i<=n;++i) scanf("%d",a+i),b[i]=a[i];sort(b+1,b+n+1);b[0]=0;s[1]=0,s[2]=10;for(int i=3;i<=14;++i) s[i]=s[i-1]*10;for(int i=1;i<=n;++i) san[i]=lower_bound(b+1,b+n+1,a[i])-b;for(int i=n;i>=1;--i){int now=a[i],wei=0,cha;if(!now) wei=1;while(now){now/=10;++wei;}int ct=wei;while(1){++wei;cha=s[wei]-a[i];int xia=lower_bound(b+1,b+n+1,cha)-b-1;if(xia==n) break;ans+=query(n+1)-query(xia);}add(san[i]);}printf("%lld\n",ans); }
蝴蝶形状的定义如下:
存在一个中心点(必须为X),并且其往左上(必须为X)、左下(必须为X)、右上(必须为O)、右下(必须为O)四个方向扩展相同的长度,且左上顶点与左下顶点之间全由X填充,右上顶点与右下顶点之间全由O填充。
XAAAO
XXAOO
XAXAO
XXAOO
XAAAO
是一个蝴蝶形状(其中A表示X或O)。
X
也是。
而
XAAO
XXOO
XXOO
XAAO
不是(不存在中心点)。
输入描述:
第一行两个整数n, m表示矩阵的大小 (1 <= n, m <= 500);接下来 n 行,每行一个长度为 m 的字符串表示矩阵,矩阵元素保证由X和O构成。
输出描述:
一行一个整数表示最大的蝴蝶形状的对角线的长度。
输入
5 5 XOOOO XXOOO XOXOO XXOOO XOOOO
输出
5
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char mp[508][508]; int n,m; bool Ju(int x,int y,int k,int size){if(mp[x+k][y+k]=='O'||mp[x+k][y+size-1-k]=='X') return true;if(mp[x+size-1-k][y+k]=='O'||mp[x+size-1-k][y+size-1-k]=='X') return true;return false; } int main(){scanf("%d%d",&n,&m);for(int i=0;i<n;++i) scanf("%s",mp[i]);int maxx=min(n,m);if((maxx&1)^1) --maxx;bool ok=0;for(int size=maxx;~size;size-=2) if(ok) break; else for(int i=0;i<=n-size;++i){int sj=(size+1)/2;for(int j=0;j<=m-size;++j) {if(mp[i+sj-1][j+sj-1]!='X') continue;bool fl=1;for(int k=0;k<sj-1;++k) if(Ju(i,j,k,size)) {fl=0;break;}if(!fl) continue;for(int k=0;k<size;++k) if(mp[i+k][j]!='X') {fl=0;break; }if(!fl) continue;for(int k=0;k<size;++k) if(mp[i+k][j+size-1]!='O'&&size!=1) {fl=0;break;}if(fl) {ok=1;break;}}if(ok) {printf("%d\n",size);break;}}if(!ok) puts("0"); }
转载于:https://www.cnblogs.com/mfys/p/7818846.html
Wannafly挑战赛3相关推荐
- Wannafly挑战赛22游记
Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...
- [Wannafly挑战赛2D-Delete]最短路
[Wannafly挑战赛2D-Delete]最短路 题目描述 给定一张 n 个点,m 条边的带权有向无环图,同时给定起点 S 和终点 T ,一共有 q 个询问,每次询问删掉某个点和所有与它相连的边之后 ...
- Wannafly挑战赛19
Wannafly挑战赛19 A. 队列Q 需要支持把一个元素移到队首,把一个元素移到队尾,移到队首就直接放到队首前面那个位置,原位置标为0,队尾同理. #include <bits/stdc++ ...
- Wannafly挑战赛18
Wannafly挑战赛18 A. 序列 先考虑暴力,相邻两个树之间乘上给定的三种数,递推出下一个位置填什么,然后再check一下,最后一位是否为1即可.这样时间显然不行,但是给我们一种思路,就是中间的 ...
- Wannafly 挑战赛27 题解
Wannafly 挑战赛27 题目连接 https://www.nowcoder.com/acm/contest/215#question A.灰魔法师 题目 题解 考虑到可能的完全平方数只有4004 ...
- Wannafly挑战赛24
Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...
- Wannafly挑战赛18B 随机数
Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...
- Wannafly挑战赛14 A-直角三棱锥
Wannafly挑战赛14 A-直角三棱锥 链接:https://www.nowcoder.com/acm/contest/81/A 来源:牛客网 题目描述 在三维空间中,平面 x = 0, y = ...
- Wannafly挑战赛27 C蓝魔法师
链接Wannafly挑战赛27 C蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于\(k\),\(n,k\leq 2*10^3\) 假设我们正在考虑\(i\)这个子树,那么 ...
- Wannafly挑战赛26-B 冥土追魂
地址:https://www.nowcoder.com/acm/contest/212/B 思路:对于行列选取,是选择所有行中的最大值的最小值,当是并不能用贪心来做,例如 2 2 2 7 8 1 9 ...
最新文章
- 接口隔离原则_是时候深入学习一下“接口隔离原则”了
- 研究一下valueOf与toString方法
- centos7开启vnc服务_阿里云CentOS 7搭建VNC远程桌面服务步骤方法
- 拥抱创新,持续探索——对话阿里云MVP胡逢法
- 股票的资产重组什么意思?
- python里order什么意思_python中OrderedDict的使用方法详解
- debian 8 和centos 配置java 环境变量的正确姿态
- Linux 使用 shell 脚本处理字符串
- Flask 框架 是 Python 中最流行的 Web 框架之一
- 【面试题系列|前端面试题】前端高频面试题总结(2021年最新版)
- Mac Book Pro桌面隐藏文件
- Unity插件——Odin 学习笔记(一)
- COPRA RF 2005 SR1最新版 (冷弯成型,轧辊设计)
- 并行处理提高工作效率
- 倾斜摄影当中模型精度和测绘当中的分辨率/比例尺是怎么回事?
- mysql课设体会_课程设计心得体会8篇
- [转]performSelector延时调用导致的内存泄露
- php工程师具备技能,PHP工程师具备的技能及素质
- seed lab 2020 packet sniffing and spoofing lab
- OPC DA与OPC UA的区别