提高组刷题营 DAY 2
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的更多相关文章
- 提高组刷题营 DAY 1 下午
DFS 深度优先搜索 通过搜索得到一棵树形图 策略:只要能发现没走过的点,就走到它.有多个点可走就随便挑一个,如果无路可走就回退,再看有没有没走过的点可走. 在图上寻找路径[少数可用最短路解决]:最短 ...
- 提高组刷题班 DAY 1 上午
低仿机器人(robo,1s,64M) 题解 大模拟 代码 #include <cstdio> #include <cstring> #include <iostream& ...
- 牛客CSP-S提高组赛前集训营1
牛客CSP-S提高组赛前集训营1 比赛链接 官方题解 before:T1观察+结论题,T2树形Dp,可以换根或up&down,T3正解妙,转化为图上问题.题目质量不错,但数据太水了~. A-仓 ...
- 牛客网CSP-S提高组赛前集训营Round4
牛客网CSP-S提高组赛前集训营 标签(空格分隔): 题解 算法 模拟赛 题目 描述 做法 \(BSOJ6377\) 求由\(n\)长度的数组复制\(k\)次的数组里每个连续子序列出现数字种类的和 对 ...
- NOIP2010提高组真题部分整理(没有关押罪犯)
目录 \(NOIP2010\)提高组真题部分整理 \(T1\)机器翻译: 题目背景: 题目描述: 输入输出格式: 输入输出样例: 说明: 题解: 代码: \(T2\)乌龟棋 题目背景: 题目描述: 输 ...
- NOIP2014提高组第二题联合权值
还是先看题吧: 试题描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...
- 牛客CSP-S提高组赛前集训营3
A 货物收集 显然是一个二分答案的题. #include<iostream> #include<cstdio> #include<cstring> #include ...
- 【枚举】Vijos P1496 火柴棒等式 (NOIP2008提高组第二题)
题目链接: https://vijos.org/p/1496 题目大意: 给你n(n<24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?("+"和"=&qu ...
- 11.5NOIP2018提高组模拟题
书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...
随机推荐
- 5.AOP配置与应用(annotation的方式)
步骤: a)在beans.xml文件中加上对应的xsd文件 spring-aop.xsd b)加上<aop:aspectj-autoproxy>,使用aspectj来完成aop <! ...
- go语言入门(9)文本文件处理
1,字符串处理 字符串在开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割.连接.转换等操作,我们可以通过Go标准库中的strings和strconv两个包中的函数进行相 ...
- C# Winform TabControl 双击关闭TabPage
在使用TabControl控件时,需要考虑自动创建的TabPage页实现——关闭功能 思路一:自定义TabControl控件,添加关闭按钮 思路二:TabControl控件TabPage显示ToolT ...
- sql server 防 注入
这里使用的是参数化 SqlParameter useremail = new SqlParameter("@useremail", user.user_Email); SqlPar ...
- GNU Radio下QT GUI Tab Widget的使用方法
期望显示出的效果: 即将要显示的图放在各自的标签页中. 整体框图: 具体设置: QT GUI Tab Widget的设置: 其中 ID改为自己想改的,这里我写的是display GUI Hint所代表 ...
- Logstash工作原理
Logstash事件处理有三个阶段:inputs → filters → outputs.是一个接收,处理,转发日志的工具.支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛 ...
- hbase实践之写流程
内容提要 一.写入流程 初始化ZooKeeper Session,建立长连接,获取META Region的地址. 获取rowkey对应的Region路由信息:来自.meta. 写入region 如何快 ...
- [HBase]region compaction流程
- c++ 用eclipse建立一个类,并实例化并运行
新建项目 file->new->c/c++ project 项目结构 cpc.cpp //================================================= ...
- [codeforces792C][dp]
https://codeforc.es/contest/792/problem/C C. Divide by Three time limit per test 1 second memory lim ...