清北合肥day1
题目:
1.给出一个由0,1组成的环
求最少多少次交换(任意两个位置)使得0,1靠在一起
n<=1000
2.两个数列,支持在第一个数列上区间+1,-1 每次花费为1
求a变成b的最小代价
n<=1e5
3.
有n首歌,每首歌每秒有p[i]的几率被破译(当大于等于t时自动破译),求期望破译歌数
题解:
t1t2都是送分题
t1 显然枚举每个位置作为开头就可以了
可以前缀和优化到O(n)
t2我们从左往右考虑每个元素,发现对于左边一位的操作是知道的
另外我们会发现一个点是不可能既有+又有-操作的(很好yy)
于是就可以直接贪心了
t3首先比较容易想到的是f[i][j]表示前i个,用了t时间的概率
然后枚举经过多长时间才到下一个来转移
但是这样是n*t*t的
考虑优化
我们会发现f[i][j]和f[i][j-1]就差了一点
然后通过之间关系来转移(看代码吧太复杂了)
考试的时候没有注意最后可能未到t时间就用完了(对拍竟然也写错了)
然后竟然还有80
另外写的时候有个细节就是如果上一次是k,但是这一次用时超过t了,我们要归为上一类
这个概率的计算我们只需要通过所有的-当前还在的来计算就可以了
代码:
t1:
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
const int N=;
char s[N];
int n;
int main()
{
freopen("swap.in","r",stdin);
freopen("swap.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n;
cin>>s;
int cnt=;
dep(i,n,)
{
s[i+n]=s[i]=s[i-];
if (s[i]=='') cnt++;
}
int ans=1e9;
rep(i,,n)
{
int ans2=;
rep(j,i,i+cnt-)
if (s[j]=='') ans2++;
ans=min(ans,ans2);
}
cout<<ans<<endl;
return ;
}
t2:
#include <bits/stdc++.h>
using namespace std;
#define rint register ll
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
#define ll long long
const ll N=2e5;
ll a[N],b[N];
ll ans,n;
int main()
{
freopen("bricks.in","r",stdin);
freopen("bricks.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n;
rep(i,,n) cin>>a[i];
rep(i,,n) cin>>b[i];
ll lst=;
rep(i,,n)
{
if (b[i]>=a[i])
{
if (lst>) ans+=max(b[i]-a[i]-lst,0ll);
else ans+=b[i]-a[i];
} else
{
if (lst<) ans+=max(a[i]-b[i]+lst,0ll);
else ans+=a[i]-b[i];
}
lst=b[i]-a[i];
}
cout<<ans<<endl;
return ;
}
t3:
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
int n,T;
int b[];
double f[][],a[];
int main()
{
freopen("song.in","r",stdin);
freopen("song.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>T;
rep(i,,n) cin>>a[i]>>b[i],a[i]/=;
f[][]=;
double num=;
double jl=;
rep(i,,n)
{
int lst=(i+)%,now=i%;
memset(f[now],,sizeof(f[now]));
double ans2=,ans3=;
rep(j,,b[i]-) ans2*=(-a[i]);
rep(j,,T)
{
ans3*=-a[i];
f[now][j]=f[lst][j-]*a[i]+ans3*a[i];
if (j>=b[i]) f[now][j]+=f[lst][j-b[i]]*ans2*(-a[i]);
if (j>=b[i]) ans3-=f[lst][j-b[i]]*ans2;
ans3+=f[lst][j-];
}
num+=f[now][T]*i;
if (i==n)
{
rep(j,,T-) num+=f[now][j]*i;
}
double ans=;
rep(j,,T) ans+=f[now][j];
num+=(jl-ans)*(i-);
jl=ans-f[now][T];
}
printf("%.4f",num);
return ;
} //考试的时候少处理了最后剩余的状态
//对拍竟然也没处理 还有80分
//细节就是从上一层到这一层的时候有可能会有需要超过t才能到达的需要算入上一层
清北合肥day1的更多相关文章
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 4.4清北学堂Day1 主要内容:数论,数学
Day 1; 1.常见的高精 输入输出都用字符数组: 字符数组的实际长度用strlen()来求: 运算时倒序运算,把每一个字符都-‘0’ 进位的处理上也要注意: 小数减大数时先判断大小然后加负号 只能 ...
- 清北国庆day1 (脑)残
(留坑) /* 不知道为什要找的循环节TM这么长 */ #include<cstdio> #include<cstdlib> #include<cstring> u ...
- 五一培训 清北学堂 DAY1
今天是冯哲老师的讲授~ 1.枚举 枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素. 用题目中给定的检验条件判定哪些是无用的,哪些是有用的.能使命题成立的即为其解. 例一一棵苹果树上有n ...
- 清北合肥day2-day5
day2:215这一天的题目相对比较模板化t1:50看错了数据范围求n个点到给出的点哈夫曼距离的最小值我想到的是一种非常zz的做法我们二分答案,然后判断是否在这个距离内有点但是这样前缀和不是很好维护于 ...
- 2017 五一 清北学堂 Day1模拟考试结题报告
预计分数:100+50+50 实际分数:5+50+100 =.= 多重背包 (backpack.cpp/c/pas) (1s/256M) 题目描述 提供一个背包,它最多能负载重量为W的物品. 现在给出 ...
- 清北Day4
版权声明:如需转载请标明出处,未得到本人许可请勿转载. 今天就可以看到传说中的 数据结构 嘿嘿嘿嘿 都有什么呢 链表 队列 栈 st表 hash 线段树 树链剖分 一.栈: 放出来这个看烂了的图 值得 ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
- 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)
清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...
随机推荐
- cocos开发插件笔记
写插件菜单时要注意大小写 { "name": "hello-world", "version": "0.0.1", &q ...
- VUE环境部署
npm install vue-router --save 下载node.js安装https://nodejs.org/en/ npm install -g cnpm --registry=http ...
- sqlite处理数据
# coding: UTF-8 import platform from _utils.patrol2 import run_cmd, data_format, report_format impor ...
- 题解-CodeForces700E Cool Slogans
Problem 题目链接 题目大意:给定一个字符串,每次取出出现至少两次的子串替换原串,问最多能替换多少次,输出答案加一(字符串长为\(2×10^5\)) Solution 前置技能:SAM.线段树合 ...
- where 和 having区别
WHERE语句在GROUP BY语句之前:SQL会在分组之前计算WHERE语句. HAVING语句在GROUP BY语句之后:SQL会在分组之后计算HAVING语句.
- 安装python2、python3
先安装python2: python安装 D:\Python27 目录下的 "python.exe" 重命名为 "python2.exe",则在cmd中输入 p ...
- sed 用法记录
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- MySQL将查询出来的一组数据拼装成一个字符串
1 前言 由于项目中有一个需求,需要把当日当周的排行榜数据归档,以便后期查询和发放奖励.然而发现,mysql的变量只能存一个变量值,然后如果要储存一条记录,可以使用CONCAT_WS,如果要储存多条记 ...
- Day8--------------yum软件包管理
1.url三段式:协议.域名.路径 例如:http://wan.360.cn/game 2.本地yum配置: vim /etc/yum.repos.d/local.repo [local] #固定格式 ...
- python-时间模块,random、os、sys、shutil、json和pickle模块
一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...