1.滞空(jump/1s/64M)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = ;
inline void rd(LL &x)
{
x=;int f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
}
LL n,m,x[],y[],g,ans;
LL qpow(LL a)
{
LL res=,k=mod-;
while(k)
{
if(k&)res=res*a%mod;
a=a*a%mod;
k>>=;
}
return res;
}
LL _2 = qpow();
void down(LL x,LL h){x%=mod;h%=mod; ans += (x*x*m%mod)*qpow(*h); ans%=mod;}
void up(LL x,LL h) {x%=mod;h%=mod; ans += (m*h%mod) + ( (x*x*m%mod) *qpow(*h) )%mod; ans%=mod;}
void pi_4(LL x){x%=mod; ans += (m*x%mod)*_2; ans%=mod;}
void solve()
{
scanf("%lld%lld%lld",&n,&m,&g);
rd(x[]); rd(y[]);
for(int i=;i<=n;i++)
{
rd(x[i&]); rd(y[i&]);
if(y[i&]>y[!(i&)]) up(x[i&]-x[!(i&)],y[i&]-y[!(i&)]);
if(y[i&]<y[!(i&)]) down(x[i&]-x[!(i&)],y[!(i&)]-y[i&]);
if(y[i&]==y[!(i&)]) pi_4(x[i&]-x[!(i&)]);
}
printf("%lldJ",ans*g%mod);
}
int main()
{
freopen("jump.in","r",stdin);
freopen("jump.out","w",stdout);
solve();
fclose(stdin);
fclose(stdout);
return ;
}

2.放爆竹(bomb/1s/64M)

题解

but......暴力出奇迹,拿70pt

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<string>
#include<cstring>
#include<queue> using namespace std; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} const int maxn=;
int n,ans=,ans1,l1,l2;
string ss;
bool flag=;
struct node{
string s;
int len;
}chuan[maxn]; bool cmp(node x,node y)
{
if(x.len ==y.len ) return x.s >y.s ;
else return x.len >y.len ;
} int gcd(int x,int y)
{
return y==?x:gcd(y,x%y);
} int lcm(int x,int y){
return x*y/(gcd(x,y));
} int work(int x,int y)
{
int res=,answ=;
string s1=chuan[x].s,s2=chuan[y].s ;
int len1=chuan[x].len ,len2=chuan[y].len ;
int len=lcm(len1,len2);
for(int i=;i<len;i++){
if(s1[i%len1]!=s2[i%len2] ){
res=max(res,answ);
answ=;
break;
}
else{
answ++;
res=max(res,answ);
}
} return res;
} int main()
{
freopen("bomb.in","r",stdin);
freopen("bomb.out","w",stdout);
n=read();
for(int i=;i<=n;i++)
{
cin>>ss;
chuan[i].s =ss;
chuan[i].len =ss.size() ;
}
sort(chuan+,chuan+n+,cmp);
for(int i=;i<=n;i++){
if(flag) break;
for(int j=i+;j<=n;j++)
{
l1=chuan[i].len ,l2=chuan[j].len;
if(lcm(l1,l2)<ans){ flag=; break; }
ans1=work(i,j);
if(ans1>ans) ans=ans1;
}
}
printf("%d\n",ans);
return ;
}

正解代码:

#include <bits/stdc++.h>

using std::max;
using std::strlen; const int N=,Mlen=,Node=N*Mlen*; int n,len[N],ans;
char s[N][Mlen]; struct Trie{
int son[Node][],node,app[Node],dep[Node],f[Node]; void init() {
son[][]=son[][]=;
app[]=dep[]=;
} int newnode(int d){
++node;
son[node][]=son[node][]=;
dep[node]=d;
app[node]=;
return node;
} void insert(char *s,int len,int t) {
int p=,add=;
while (t) {
for (int i=;i<len && add<=;++i) {
int &x=son[p][s[i]-''],pp=p;
p=x?x:x=newnode(dep[p]+); f[p]=pp;
app[p]++; add++;
}
t--;
}
} int FindAns() {
int ans=;
for (int i=;i<=node;++i) if (app[i]>=) {
ans=max(ans,dep[i]);
}
// for (int i=1;i<=node;++i) if (app[i]>=2 && ans==dep[i]) {
// int p=i;
// while (p) {
// putchar((p==son[f[p]][1])+'0');
// p=f[p];
// }
// putchar('\n');
// break;
// }
return ans;
} }tr; void Init() {
scanf("%d",&n);
for (int i=;i<=n;++i) {
scanf("%s",s[i]); len[i]=strlen(s[i]);
}
} void Solve() {
tr.init();
for (int i=;i<=n;++i) {
tr.insert(s[i],len[i],(-)/len[i]+);
}
printf("%d\n",tr.FindAns());
} int main() {
freopen("bomb.in","r",stdin);
freopen("bomb.out","w",stdout);
Init();
Solve();
fclose(stdin);
fclose(stdout);
return ;
}

3.pyy整队(queue,1s,128M)

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define mid ((l+r)>>1)
const int N=2e5+,inf=0x3f3f3f3f;
int n,m,rt;
int L[N<<], R[N<<], v[N<<];
int a[N], b[N], pos[N], nxt[N], pre[N], cs, cnt;
void build(int &i,int l,int r)
{
i = ++cs;
if(l<r) build(L[i],l,mid), build(R[i],mid+,r), v[i] = min( v[L[i]] , v[R[i]] );
else v[i] = pos[l];
}
void alter(int i,int l,int r,int p)
{
if(l<r)
{
if(p<=mid) alter(L[i],l,mid,p);
else alter(R[i],mid+,r,p);
v[i] = min(v[L[i]],v[R[i]]);
}
else v[i] = ++cnt;
}
inline int query(int i,int l,int r,int k)
{
while(l<r)
{
if(v[L[i]]<=k) i = L[i], r = mid;
else i = R[i], l = mid + ;
}
return l;
}
void solve()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]), b[i] = a[i];
sort(b+,b++n);
for(int i=;i<=n;i++)//离散化a初始排列
{
a[i] = lower_bound(b+,b++n,a[i]) - b;
nxt[a[i-]] = a[i]; pre[a[i]] = a[i-];
pos[a[i]] = i;
}
build(rt,,n); cnt = n; int last = a[n];//last队尾
while(m--)
{
static char s[]; static int x,t;
scanf("%s%d",s,&x);
t = lower_bound(b+,b++n,x) - b;
if(s[]=='A')
{
if(!pre[t]) printf("-1\n");
else printf("%d\n",b[ query(rt,,n,pos[pre[t]]) ]);//查询小于等于pos[pre_t]的最小值的人
}
else
{
if(last==t)continue;
alter(rt,,n,t);//单点修改第t人pos
pos[t] = cnt;
nxt[pre[t]] = nxt[t]; pre[nxt[t]] = pre[t];//当前的前后驱修改
pre[t] = last; nxt[last] = t;
last = t;
}
}
sort(pos+,pos++n);
int tail = , ans = inf;
for(int i=;i<=n && tail<n;i++)
{
while(pos[tail] - pos[i] + <n && tail<=n) tail++;
if(tail>n || pos[tail] - pos[i] + >n) tail--;
ans = min(ans,i- + n-tail);//左右区间剩下的
}
printf("%d\n",ans);
}
int main()
{
freopen("queue.in","r",stdin);
freopen("queue.out","w",stdout);
solve();
fclose(stdin);
fclose(stdout);
return ;
}

提高组刷题营 DAY 2的更多相关文章

  1. 提高组刷题营 DAY 1 下午

    DFS 深度优先搜索 通过搜索得到一棵树形图 策略:只要能发现没走过的点,就走到它.有多个点可走就随便挑一个,如果无路可走就回退,再看有没有没走过的点可走. 在图上寻找路径[少数可用最短路解决]:最短 ...

  2. 提高组刷题班 DAY 1 上午

    低仿机器人(robo,1s,64M) 题解 大模拟 代码 #include <cstdio> #include <cstring> #include <iostream& ...

  3. 牛客CSP-S提高组赛前集训营1

    牛客CSP-S提高组赛前集训营1 比赛链接 官方题解 before:T1观察+结论题,T2树形Dp,可以换根或up&down,T3正解妙,转化为图上问题.题目质量不错,但数据太水了~. A-仓 ...

  4. 牛客网CSP-S提高组赛前集训营Round4

    牛客网CSP-S提高组赛前集训营 标签(空格分隔): 题解 算法 模拟赛 题目 描述 做法 \(BSOJ6377\) 求由\(n\)长度的数组复制\(k\)次的数组里每个连续子序列出现数字种类的和 对 ...

  5. NOIP2010提高组真题部分整理(没有关押罪犯)

    目录 \(NOIP2010\)提高组真题部分整理 \(T1\)机器翻译: 题目背景: 题目描述: 输入输出格式: 输入输出样例: 说明: 题解: 代码: \(T2\)乌龟棋 题目背景: 题目描述: 输 ...

  6. NOIP2014提高组第二题联合权值

    还是先看题吧: 试题描述  无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...

  7. 牛客CSP-S提高组赛前集训营3

    A 货物收集 显然是一个二分答案的题. #include<iostream> #include<cstdio> #include<cstring> #include ...

  8. 【枚举】Vijos P1496 火柴棒等式 (NOIP2008提高组第二题)

    题目链接: https://vijos.org/p/1496 题目大意: 给你n(n<24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?("+"和"=&qu ...

  9. 11.5NOIP2018提高组模拟题

    书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...

随机推荐

  1. K2 BPM_携手东航物流,领跑全球航空物流业_全球领先的工作流引擎

    现代物流产业正在世界范围内广泛兴起,物流产业已成为各个国家国民经济发展的动脉和基础产业.随着物流新格局的加速形成,商业竞争的核心要素已经从传统的对资产资源的占有,演化为对资本.人才与技术的争夺,流量. ...

  2. 7.使用EXPLAIN 来分析SQL和表结构_2

    possible_keys    ------   显示可能应用在这张表的索引,一个或多个 查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被实际查询使用 key   ------   实际使 ...

  3. C++手动调用析构函数无效问题排查

    在学习C++的时候,都知道不要手动调用析构函数,也不要在构造函数.析构函数里调用虚函数.工作这么多年,这些冷门的知识极少用到,渐渐被繁杂的业务逻辑淹没掉. 不过,最近项目里出现了析构函数没有被正确地调 ...

  4. 数学模块 math 函数的调用

    数学模块 math 模块名: math 注: linux下为内建模块 Mac OS下为标准库模块 数学模块用法: import math # 或 from math import * 数据 描述 ma ...

  5. elasticsearch 数据备份

    ES数据备份找了一些方法,发现elasticdump 这个工具不错 elasticdump --input=http://192.168.0.92:9200/hs2840 --output ./hs2 ...

  6. Hadoop_23_MapReduce倒排索引实现

    1.1.倒排索引  根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确 定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(invert ...

  7. Ubuntu系统---安装Caffe (+OpenCV+Python+CPU-only)

    安装配置Ubuntu14.04+Caffe (+OpenCV+Python+CPU-only) 记录 [作者:Wu Ping.时间:20180428.] 本人已经安装很多次的Caffe了:从开始的初探 ...

  8. python+selenium之——pip环境变量配置

    将pip的路径……\Python37-32\Scripts添加进Path: 而非……\Python37-32\Lib\site-packages\pip-18.1-py3.7.egg

  9. 【CodeForces】915 G. Coprime Arrays 莫比乌斯反演,前缀和,差分

    Coprime Arrays CodeForces - 915G Let's call an array a of size n coprime iff gcd(a1, a2, ..., *a**n) ...

  10. loj515 「LibreOJ β Round #2」贪心只能过样例[bitset+bool背包]

    由于bitset极其不熟练且在实际题目中想不起来运用它来优化,于是练了几道题. 这题是一个分组的bool背包,每组必须选一个,暴力的话是$O(n^5)$. 如果dp数组不要一维滚动的话,有两种枚举方法 ...