EXAM-2018-7-29
EXAM-2018-7-29
未完成
- [ ] H
- [ ] A
D
莫名TLE 不在循环里写strlen()就行了
F
相减特判 水题
J
模拟一下就可以发现规律,o(n)
K
每个数加一减一不变,用map,再从-1枚举,那个数出现最多就是答案
I
通过观察我们可以发现,我们只用维护每个间断点就可以。查询的时候就从最近那个间断点出发,乘以相差的时间再判断合法性就可以了。现在的问题是如何维护间断点。因为每次查询时它的初始值是不一样的,如果每次都从原点开始肯定会T,所以我们可以维护一个合法区间,一个从0开始,一个从X开始。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
int s[maxn];
int main(){
int X;
scanf("%d",&X);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&s[i]);
}
int k,time,x;
int t=0,j=0,l=X,r=0,stage=-1,ans,aa=0;
scanf("%d",&k);
for(int i=1;i<=k;i++){
scanf("%d%d",&time,&x);
while(j<n&&s[j+1]<=time){
ans=stage*(s[j+1]-t);
l=max(0,min(X,l+ans));
r=max(0,min(X,r+ans));
t=s[j+1];
stage=-stage;
j++;
aa+=ans;
//cout<<ans<<endl;
}
int num=time-t;
x=max(r,min(l,x+aa));
x=max(0,min(X,x+stage*(num)));
printf("%d\n",x);
}
return 0;
}
B
听学长讲的这道题,感觉思路很清晰。首先游戏有三种人:正常人,僵尸,感染者;游戏结束的条件是没有正常人。然后boss每轮会让一个人变成僵尸,僵尸会让是自己倍数的玩家感染。
当初审题的时候就感觉特别乱,其实理清楚这道题就是一道普通的组合数学。如何让游戏结束,就是当RMB玩家(无法被他人感染)变成僵尸,其他的非RMB玩家可以说什么时候被感染不用去管,因为只有RMB玩家被全部变成僵尸游戏才结束。
可以得出公式,我们枚举轮数,轮数跟RMB玩家最后被感染的位置有关。我们先在该位置上放一个RMB玩家,然后前面的C(座位数,RMB玩家-1),RMB跟非RMB与顺序有关,再乘以轮数,结果就出来了
#include<bits/stdc++.h>
#define ll long long
#define met(a) memset(a, 0, sizeof(a))
using namespace std;
const int maxn=1e7+5,mod=1e9+7;
ll l,r,n,cnt,fac[maxn],inv[maxn];
bool isprime[maxn];
ll qpow(ll x,ll k){
ll ret=1;
while(k){
if(k&1) ret = (ret*x)%mod;
x = x*x%mod;
k>>=1;
}
return ret;
}
void init(){
fac[0]=1;
for(ll i=1;i<=n+1;i++) fac[i]=(fac[i-1]*i)%mod;
inv[n+1]=qpow(fac[n+1],mod-2);
for(ll i=n;i>=0;i--) inv[i]=(inv[i+1]*(i+1))%mod;
for(int i=l;i<=r;i++){
if(!isprime[i]) cnt++;
for(int j=i+i;j<=r;j+=i)
isprime[j]=1;
}
return ;
}
ll C(ll x,ll y){
if(!x&&!y) return 1;
if(x<y) return 0;
return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int main(){
scanf("%lld%lld",&l,&r);
n=r-l+1;
init();
ll ans=0;
for(ll i=l+cnt-1;i<=r;++i){
ans = (ans+(i-l+1)*C(i-l,cnt-1)%mod*fac[cnt]%mod*fac[n-cnt]%mod)%mod;
//cout<<C(i-l,cnt-1)%mod*fac[cnt]%mod*fac[n-cnt]%mod<<endl;
}
printf("%lld\n",ans%mod);
return 0;
}
然后这里面有一个基本的求组合数的模板:
ll qpow(ll x,ll k){
ll ret=1;
while(k){
if(k&1) ret = (ret*x)%mod;
x = x*x%mod;
k>>=1;
}
return ret;
}
void init(){
fac[0]=1;
for(ll i=1;i<=n+1;i++) fac[i]=(fac[i-1]*i)%mod;
inv[n+1]=qpow(fac[n+1],mod-2);
for(ll i=n;i>=0;i--) inv[i]=(inv[i+1]*(i+1))%mod;
//for(int i=l;i<=r;i++){
// if(!isprime[i]) cnt++;
// for(int j=i+i;j<=r;j+=i)
// isprime[j]=1;
//}
return ;
}
ll C(ll x,ll y){
if(!x&&!y) return 1;
if(x<y) return 0;
return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
H
现在中文题也看不懂了
题目意思是可以交换单词里的字母,从而让所给的这几个单词构建的字典树节点最少。我们先假设:
- 若一个单词构成字典树,则节点数为总字符数+1
- 若两个单词构成字典树,则节点数为两个单词总字符数-相同字符数+1
- 若三个或多个单词构成字典树,则节点数为多个单词总字符数-相同字符数+1?
然鹅并不是
假设三个单词:apple phy ppt 这么算的话节点数应该是11,但是正确答案是9.当apple跟ppt先组合,再与phy组合就是最优解,由此可见不能直接采用三种结合的方法。我们可以两两组合,然后再递推。从而想到状态压缩DP
准备状态压缩从零开始
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+7;
char str[maxn];
int cnt[20][200],ans[205];
int main(){
int n,len;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",str);
len=strlen(str);
for(int j=0;j<len;j++){
cnt[i][str[j]]++;
}
}
int k=(1<<n)-1;
int f[k+5];
memset(f,0,sizeof(f));
for(int i=1;i<=k;i++){//枚举所有状态
memset(ans,0x3f,sizeof(ans));
for(int j=1;j<=n;j++){
if(i&(1<<(j-1))){
for(int aa='a';aa<='z';aa++){
ans[aa]=min(cnt[j][aa],ans[aa]);//每个字母在这个状态出现最少次数
f[i]+=cnt[j][aa];
}
}
}
int sum=0;
for(int aa='a';aa<='z';aa++) sum+=ans[aa];
for(int z=i&(i-1);z;z=i&(z-1)){//状态转移 递推
f[i]=min(f[i],f[i^z]+f[z]-sum);
}
}
printf("%d\n",f[k]+1);
return 0;
}
这里有两种枚举:
- 二进制枚举:
int k=(1<<n)-1;
for(int i=1;i<=k;i++){//枚举所有状态
for(int j=1;j<=n;j++) if(i&(1<<(j-1))){
- 枚举子集:
for(int z=i&(i-1);z;z=i&(z-1)){
EXAM-2018-7-29的更多相关文章
- 记2018/4/29 qbxt 测试
记 2018/4/29 qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...
- spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日
最基本的ssm框架整合 本案例采用2018商业版intellij idea 编辑器 maven项目管理工具 tomcat8.5 接着上一篇使用springmvc最基本配置开始 https: ...
- 2018.10.29 NOIP2018模拟赛 解题报告
得分: \(70+60+0=130\)(\(T3\)来不及打了,结果爆\(0\)) \(T1\):简单的求和(点此看题面) 原题: [HDU4473]Exam 这道题其实就是上面那题的弱化版,只不过把 ...
- 【2018.07.29】(深度优先搜索/回溯)学习DFS算法小记
参考网站:https://blog.csdn.net/ldx19980108/article/details/76324307 这个网站里有动态图给我们体现BFS和DFS的区别:https://www ...
- 2018.3.29 div内容格式设置
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 2018.3.29 div格式设置
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 2018.3.29 DIV位置调整代码
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 2018.09.29 Lua
转自:https://zybuluo.com/lisaisacat/note/636399 谢谢 Lua 基础简明教程 脚本开发 目录 Lua 基础简明教程 目录 注释 Lua 编程 语句块 赋 ...
- 2018.12.29 codeforces 940E. Cashback(线性dp)
传送门 题意:给出一个nnn个数的序列,要求将序列分成若干段,对于一段长度为kkk的自动删去最小的⌊kc⌋\left \lfloor \frac{k}{c} \right \rfloor⌊ck⌋个数 ...
- 2018.10.29 bzoj3718: [PA2014]Parking(树状数组)
传送门 显然只用判断两个会相交的车会不会卡住就行了. 直接树状数组维护后缀最大值就行了. 代码: #include<bits/stdc++.h> using namespace std; ...
随机推荐
- mysql查询用if控制显示列
1: select *,if(sex=1,”男”,”女”) as sex from user2: select CASE sex WHEN 1 THEN ‘男’ ELSE ‘女’ END as sex ...
- .NET技术-5.0. NETCORE设置返回数据字段的大小写
.NET技术-5.0. NETCORE设置返回数据字段的大小写 问题来源于我写了一个接口,接口的返回类型是JsonResult,但是对接之后反应返回结果的首字母全小写了, 后来查了写资料返现.net ...
- 十一、GUI设计-记事本程序
"""记事本程序""" from tkinter import *from tkinter.filedialog import *from ...
- PAT Advanced 1064 Complete Binary Search Tree (30) [⼆叉查找树BST]
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
- 使用idea出现的错误
错误:打开maven项目时出现"程序包 com.sun.org.apache.xpath.internal 不可见 "的错误 这个问题出现的原因是: jdk版本的问题.可能是因为有 ...
- JavaScript学习总结(三)
在学习完了基本的内容之后,我们来学习一下JavaScript中的对象部分以及如何自定义对象的问题. String对象 创建字符串的方式共有两种: 方式1:new String("内容&quo ...
- [CF百场计划]#3 Educational Codeforces Round 82 (Rated for Div. 2)
A. Erasing Zeroes Description You are given a string \(s\). Each character is either 0 or 1. You wan ...
- ccs-基础-阴影
1.html代码 <div class="demo demo1">假如生活欺骗了你</div> <div class="demo demo2 ...
- 试验指标|试验单位|均方|随机模型|固定模型|字母标记法|LSR|q检验|LSD|重复值|弥补缺失数据|可加性|平方根转换|对数转换|反正弦转化
第五章 方差分析 试验指标是什么? 就是统计的测量值,eg:身高体重 试验单位( experimental unit )是什么? 实验载体,比如一只小白鼠 均方是什么? 就是方差 随机模型的τ有何特点 ...
- leetcode腾讯精选练习之除自身以外数组的乘积(十)
最长公共前缀 题目 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. ...