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. C++ STL 之 set 和 pair

    set/multiset 的特性是所有元素会根据元素的值自动进行排序.set 是以 RB-tree(红黑树,平衡二叉树的一种)为底层机制,其查找效率非常好.set 容器中不允许重复元 素,multis ...

  2. 使用Eclipse开发Java应用并部署到SAP云平台SCP上去

    1. 首先根据这个链接配置好Eclipse. 确保SAP Cloud Platform Tools for Java正确安装. 确保neo SDK的路径配置正确: 我使用的是下图这个SDK:neo-j ...

  3. SpringCloud之Hystrix容错保护原理及配置

    1 什么是灾难性雪崩效应? 如下图的过程所示,灾难性雪崩形成原因就大致如此: 造成灾难性雪崩效应的原因,可以简单归结为下述三种: 服务提供者不可用.如:硬件故障.程序BUG.缓存击穿.并发请求量过大等 ...

  4. 【SpringBoot】入门程序和机制分析

    一.初建项目 首先要导入SpringBoot的Maven依赖 <!-- Inherit defaults from Spring Boot --> <!-- 这是SpringBoot ...

  5. Delphi 构造和析构

  6. BIO、NIO、AIO 有什么区别?(未完成)

    BIO.NIO.AIO 有什么区别?(未完成)

  7. php 常用正则运算

    $regx = "/^[0-9]*$/"; var_dump(preg_match($regx, $phone)); 常用的正则运算: •验证数字:^[0-9]*$ •验证n位的数 ...

  8. ubuntu18系统 Qt Error BadAccess

    现象:在ubuntu18中报错 X Error: BadAccess (attempt to access private resource denied) 10  Extension:    130 ...

  9. mybatis分页未明确的列定义

    问题出现原因是 集成mybaits时 会自动加上 select tmp_page.*, rownum row_id from ( abc )tmp_page 我的问题是 abc区域的列名有重名的,保持 ...

  10. Hbuilder + MUI 的简单案例

    话不多说 直接上代码 项目结构: index.html 的代码 <!DOCTYPE html><html>    <head>        <meta ch ...