Day1 210pts(含T1莫名的-10pts和T3莫名的-30pts)

100+70+40=210

rank 29

这道题第一眼看是字符串匹配问题什么KMP啊,又想KMP不会做啊,那就RK Hash 吧,结果Hash打了一半发现Hint:要全排列,

然后掐指一算3000!一定爆所以换思路,对于区间[l,r]字符种类和对应数目与前面那个串完全相同就是一个匹配,常数是52,应该能过

# include <bits/stdc++.h>
using namespace std;
char a[],b[];
int sta[],stb[],lena,lenb;
int fun(char ch)
{
if ('A'<=ch&&ch<='Z') return ch-'A'+;
else return ch-'a'++;
}
bool check()
{
for (int i=;i<=;i++)
if (sta[i]!=stb[i]) return false;
return true;
}
int main()
{
freopen("mayan.in","r",stdin);
freopen("mayan.out","w",stdout);
int t1,t2; scanf("%d%d",&t1,&t2);
getchar();
for (int i=;i<=t1;i++) a[i]=getchar(); getchar();lena=t1;
for (int i=;i<=t2;i++) b[i]=getchar(); getchar();lenb=t2;
for (int i=;i<=lena;i++) {sta[fun(a[i])]++;}
int ans=;
for (int i=;i<=lenb;i++) {
if (i<=lena-) { stb[fun(b[i])]++;continue;}
else if (i==lena) {
stb[fun(b[i])]++;
if (check()) ans++;
continue;
}
stb[fun(b[i-lena])]--; stb[fun(b[i])]++;
if (check()) ans++;
}
printf("%d\n",ans);
return ;
}

事情是这样的,求形如(a...a)(b....b)或(a.....a)的子序列个数

如abba中{a,b,ab,bb,ba,abb,bba}有且有7个

于是考场上写出20行的STL代码,70分!跟我一起念:STL大法好qwq

70pts(MLE/TLE)

# include <bits/stdc++.h>
using namespace std;
set<string>stt; string s;
int main()
{
freopen("strange.in","r",stdin);
freopen("strange.out","w",stdout);
cin>>s;
int len=s.length();
char ch1,ch2;
for (int i=;i<len;i++) {
ch1=s[i]; int j=i;
while (j<len&&s[j]==ch1) { j++; stt.insert(s.substr(i,j-i));}
ch2=s[j];
while (j<len&&s[j]==ch2) { j++; stt.insert(s.substr(i,j-i));}
}
int ans=,i;
printf("%d\n",stt.size());
return ;
}

好了讲正解,vector[i][j]表示形如(i....i)(j....j)的二元组(x,y)表示有x个i,y个j组成,然后就会对于每个vecort都会有二元组,然后面积求和即可

然后把所有面积的并集求出来就是vector[i][j]的值,然后把各值求出来累加就行了。

# include <bits/stdc++.h>
using namespace std;
struct Node{
int x,y;
};
vector <Node> a[][];
Node m[];
int n;
bool cmp(Node aa,Node bb)
{
if (aa.x!=bb.x) return aa.x>bb.x;
else return aa.y>bb.y;
}
char s[];
int fun()
{
sort(m+,m++n,cmp);
int X=m[].x,Y=m[].y;
int S=X*Y;
for (int i=;i<=n;i++)
if (m[i].y>Y) {
S=S+(m[i].y-Y)*m[i].x;
X=m[i].x;Y=m[i].y;
}
return S;
}
int main()
{
scanf("%s",s+);
int len=strlen(s+);
int i;
for (i=;i<=len;i++) {
char ch1,ch2;
int cnt1=,cnt2=;
ch1=s[i]; int j=i;
while (j<=len&&s[j]==ch1) j++,cnt1++;
if (j>len) j=len; ch2=s[j];
int kk=j-;
while (j<=len&&s[j]==ch2) j++,cnt2++;
if (ch1==ch2) continue;
Node N; N.x=cnt1; N.y=cnt2;
a[ch1-'a'+][ch2-'a'+].push_back(N);
i=kk;
}
int ans=;
for (int i=;i<=;i++)
for (int j=;j<=;j++)
{
n=(int)(a[i][j].size());
memset(m,,sizeof(m));
for (int k=;k<=n;k++) m[k]=a[i][j][k-];
ans=ans+fun();
}
for (int i=;i<=;i++) {
int cnt=,maxx=;
bool flag=false;
for (int j=;j<=len;j++) if (s[j]==i+'a'-) flag=true;
for (int j=;j<=len;j++) {
while (s[j]==i+'a'-&&s[j+]==i+'a'-&&j<len) j++,cnt++;
maxx=max(maxx,cnt);
cnt=;
}
if (flag)ans=ans+maxx+;
}
printf("%d\n",ans);
return ;
}

std:

#include <bits/stdc++.h>
using namespace std;
template <typename T> void read(T &t) {
char ch=getchar(); int f=; t=;
while (''>ch||ch>'') { if (ch=='-') f=-; ch=getchar(); }
do { (t*=)+=ch-''; ch=getchar(); } while (''<=ch&&ch<=''); t*=f;
}
typedef long long ll;
const int maxn=;
int n,k,x[maxn],a[maxn],sz;
map<int,int> m;
ll ans;
int main() {
read(n); read(k);
for (int i=;i<=n;i++) {
read(x[i]); m[x[i]]++;
}
sort(x+,x+(n+));
for (int i=;i<=n;i++)
if (x[i]!=x[i-]) a[++sz]=x[i];
int pos=,c1=,c2=;
for (int i=;i<=sz;i++) {
while (pos<sz&&a[pos+]<=(ll)a[i]*k) {
pos++;
if (m[a[pos]]>=) c1++;
else c2++;
}
int v=;
if (m[a[i]]>=) v++;
int s=c1+c2-;
ans+=*(c1-v);
if (s>) ans+=3LL*s*(s-);
if (m[a[i]]>=) ans+=*(c1+c2-);
if (m[a[i]]>=) ans++;
if (m[a[i]]>=) c1--; else c2--;
}
cout<<ans<<endl;
return ;
}

HGOI2010816 (NOIP 提高组模拟赛 day1)的更多相关文章

  1. 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】

    U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...

  2. [LUOGU] NOIP提高组模拟赛Day1

    题外话:以Ingress为题材出的比赛好评,绿军好评 T1 考虑枚举第\(i\)个人作为左边必选的一个人,那左边剩余\(i-1\)个人,选法就是\(2^{i-1}\),也就是可以任意选或不选,右侧剩余 ...

  3. 洛谷 NOIP提高组模拟赛 Day1

    传送门 ## $T1$ 一道结论题,设原来A队能力最大的是x,那么A队的选择方案就是$2^{x-1}$,B队的选择方案就是$(2^{n-x}-1)$种,因为不能不选.其中$1\leq x\leq n$ ...

  4. 计蒜客 2017 NOIP 提高组模拟赛(四)Day1 T2 小X的密室

    https://nanti.jisuanke.com/t/17323 小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1号房间,而出口在 N号房间. 密室的每 ...

  5. 10-18 noip提高组模拟赛(codecomb)T1倍增[未填]

    T1只想到了找环,> <倍增的思想没有学过,所以看题解看得雨里雾里的(最近真的打算学一下! 题目出的挺好的,觉得noip极有可能出现T1T2T3,所以在此mark 刚开始T1以为是模拟,还 ...

  6. 10-18 noip提高组模拟赛(codecomb)T2贪心

    T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...

  7. HGOI20180815 (NOIP 提高组模拟赛 day2)

    Day 2 rank 11 100+35+30=165 本题是一道数论题,求ax+by=c的正整数对(x,y) x>=0并且y>=0 先说下gcd: 求a,b公约数gcd(a,b) 如gc ...

  8. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  9. noip提高组模拟赛(QBXT)T2

    T2count题解 [ 问题描述]: 小 A 是一名热衷于优化各种算法的 OIER,有一天他给了你一个随机生成的 1~n 的排列, 并定 义区间[l,r]的价值为: \[ \huge C_{l,r}= ...

随机推荐

  1. jupyter notebook的两个使用技巧

    1.设置jupyter notebook的密码: Jupyter-notebook password 2.查看jupyter notebook的token: Jupyter notebook list

  2. 带你看懂大数据采集引擎之Flume&采集目录中的日志

    一.Flume的介绍: Flume由Cloudera公司开发,是一种提供高可用.高可靠.分布式海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于采集数据:同时,flum ...

  3. 2017-2018 Exp1 PC平台逆向破解 20155214

    目录 Exp1 PC平台逆向破解 实验内容 知识点 官方源 中科大源 上海交大的源 新加坡源 debain源 debian安全更新源 163源的地址 阿里云kali源 启发 评论 Exp1 PC平台逆 ...

  4. 20155218《网络对抗》Exp2 后门原理与实践

    20155218<网络对抗>Exp2 后门原理与实践 常用后门工具实践 1.Windows获得Linux Shell: 在Windows下,先使用ipconfig指令查看本机IP,使用nc ...

  5. linux查找进程pid并杀掉

    命令:ps aux | grep `pwd` | grep -v  grep | awk '{print $2}' | xargs kill -9 详细解释[我的有道云笔记,不知道为什么没法直接复制到 ...

  6. python list的一个面试题

    面试题''' 一个list,里面的数字偶数在左边,奇数在右边,不借助其他列表 ''' def userlist(add_list): if type(add_list)==list: if len(a ...

  7. 「功能笔记」Spacemacs+Evil备忘录

    设置代理 (setq url-gateway-method 'socks) (setq socks-server '("Default server" "127.0.0. ...

  8. Unity协程Coroutine使用总结和一些坑

    原文摘自 Unity协程Coroutine使用总结和一些坑 MonoBehavior关于协程提供了下面几个接口: 可以使用函数或者函数名字符串来启动一个协程,同时可以用函数,函数名字符串,和Corou ...

  9. 作业五:分析system_call中断处理过程

    分析system_call中断处理过程 一.MesuSO增加getpid和getpid-asm 二.使用GDB跟踪系统调用内核函数sys_getpid 分析system_call中断处理过程 使用gd ...

  10. 第二阶段冲刺——six

    个人任务: 季方:优化统计团队博客的方法. 马佳慧:选择功能界面的logo.背景与功能选择框的整体设计组合. 司宇航:合并程序(添加打印txt). 王金萱:搭建网络服务器,上传数据库及程序. 站立会议 ...