1.字符串匹配

看到题目以为真是字符串题结果是数学题。。70分做法很傻逼然而我更傻逼只有30。。。

正解是发现两个位置会匹配当且仅当mod gcd(lena,lenb)同余,在一个lcm(lena,lenb)的长度内所有模gcd同余的位置会一一匹配。我大概只能感性理解一下和随便证一下模gcd同余则可以匹配。

然后用乘法原理计数。代码超短的。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=2e6+;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,cnt[],lena,lenb;
LL ans;
char a[N],b[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} LL gcd(LL a,LL b) { return !b?a:gcd(b,a%b); } #define ANS
int main() {
#ifdef ANS
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
#endif
read(n); read(m);
scanf("%s",a); lena=strlen(a);
scanf("%s",b); lenb=strlen(b);
LL d=gcd(lena,lenb);
For(t,,d-) {
memset(cnt,,sizeof(cnt));
For(i,,lena/d-)
cnt[a[i*d+t]-'a']++;
For(i,,lenb/d-)
ans+=cnt[b[i*d+t]-'a'];
}
ans*=n*d/lenb;
printf("%lld\n",ans);
Formylove;
}

2.积木大赛

感觉这题很傻逼啊。少有的不是模板但是可以秒切的题。

枚举最高点的位置,二分最高点,再往左右二分满足最高点条件(从最高点开始依次减1)的最近位置,这个可以用st表或者线段树什么的维护。算算要达到最高点积木够不够即可。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m;
LL h[N],st1[N][],st2[N][],sum[N],ans; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} void make_st() {
For(i,,n) st1[i][]=h[i]+i,st2[i][]=h[i]+(n-i+);
For(j,,) For(i,,n) {
if(i+(<<j)-<=n)
st1[i][j]=max(st1[i][j-],st1[i+(<<j-)][j-]);
if(i-(<<j)+>=)
st2[i][j]=max(st2[i][j-],st2[i-(<<j-)][j-]);
}
} int ck(int pos,LL x) {
int l=pos,r=pos;
Rep(i,,) if(r+(<<i)-<=n&&st1[r][i]<x+pos)
r+=(<<i);
Rep(i,,) if(l-(<<i)+>=&&st2[l][i]<x+(n-pos+))
l-=(<<i);
LL nd=;
if(l<||r>n) return ;
if(l+<=pos) {
l++;
nd=nd+(x+x-(pos-l))*(pos-l+)/-(sum[pos]-sum[l-]);
}
if(r->=pos) {
r--;
nd=nd+(x+x-(r-pos))*(r-pos+)/-(sum[r]-sum[pos-]);
}
return nd-(x-h[pos])<=m;
} LL solve(int pos) {
LL l=h[pos],r=h[pos]+m,rs=l;
while(l<=r) {
int mid=((l+r)>>);
if(ck(pos,mid)) rs=mid,l=mid+;
else r=mid-;
}
return rs;
} #define ANS
int main() {
#ifdef ANS
freopen("block.in","r",stdin);
freopen("block.out","w",stdout);
#endif
read(n); read(m);
For(i,,n) read(h[i]),sum[i]=sum[i-]+h[i];
make_st();
For(i,,n)
ans=max(ans,solve(i));
printf("%lld\n",ans);
Formylove;
}

3.考古研究

30分和70分还是比较好做,但是傻逼地搞了好久t1然后这天考得就很爆炸。

一张我的草稿:

就是草稿,所以非常乱。

继续70分是思路,倒着考虑最后地表的每个点经过若干次沉降后到达的位置。

对于这个转过的网格图,从左到右x从1~n,从上到下y从1~n,每个格子上的权值就是它的x坐标减y坐标除以2

操作逆过来,一种是选x较大的一部分区间x+=2*L,一种是选y较小的部分区间y-=2*L

每次操作线段树上二分在操作范围内的区间,区间修改即可。直接二分好写很多就没写线段树上二分了。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct node {
int x,d,l;
}q[N]; #define lc x<<1
#define rc (x<<1|1)
#define mid ((l+r)>>1)
struct sgtree {
LL lz[N<<];
void down(int x) {
if(!lz[x]) return ;
lz[lc]+=lz[x]; lz[rc]+=lz[x];
lz[x]=;
} void update(int x,int l,int r,int ql,int qr,int v) {
if(l>=ql&&r<=qr) {
lz[x]+=v; return ;
}
down(x);
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+,r,ql,qr,v);
} LL qry(int x,int l,int r,int pos) {
if(l==r) return lz[x];
down(x);
if(pos<=mid) return qry(lc,l,mid,pos);
else return qry(rc,mid+,r,pos);
}
}sgx,sgy; #define ANS
int main() {
#ifdef ANS
freopen("geologic.in","r",stdin);
freopen("geologic.out","w",stdout);
#endif
read(n); read(m);
For(i,,m) {
read(q[i].x);
read(q[i].d);
read(q[i].l);
}
For(i,,n) sgx.update(,,n,i,i,i),sgy.update(,,n,i,i,i);
Rep(i,m,) {
if(q[i].d==) { //down
int l=,r=n,rs=-;
while(l<=r) {
if(sgx.qry(,,n,mid)<=q[i].x) rs=mid,l=mid+;
else r=mid-;
}
if(rs!=-) sgy.update(,,n,,rs,-*q[i].l);
}
else { //right
int l=,r=n,rs=-;
while(l<=r) {
if(sgy.qry(,,n,mid)>q[i].x) rs=mid,r=mid-;
else l=mid+;
}
if(rs!=-) sgx.update(,,n,rs,n,*q[i].l);
}
}
For(i,,n) printf("%lld\n",(sgx.qry(,,n,i)-sgy.qry(,,n,i))/);
Formylove;
}

暑假集训test-8-31(am)的更多相关文章

  1. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  2. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  3. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  4. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

  5. 2013ACM暑假集训总结-致将走上大三征途的我

    回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...

  6. [补档]暑假集训D6总结

    考试 不是爆零,胜似爆零= = 三道题,就拿了20分,根本没法玩好吧= = 本来以为打了道正解,打了道暴力,加上个特判分,应该不会死的太惨,然而--为啥我只有特判分啊- - 真的是惨. 讲完题觉得题是 ...

  7. [补档]暑假集训D5总结

    %dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/   ...

  8. [补档]暑假集训D1总结

    归来 今天就这样回来了,虽然心里极其不想回来(暑假!@#的只有一天啊喂),但还是回来了,没办法,虽然不喜欢这个地方,但是机房却也是少数能给我安慰的地方,心再累,也没有办法了,不如好好集训= = %da ...

  9. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

  10. [补档]暑假集训D3总结

    考试 集训第一次考试,然而- -   总共四道题,两道打了DFS,一道暴力,一道~~输出样例~~乱搞,都是泪啊- - 目前只改了三道,回头改完那道题再上题解吧- - T2 [Poi2010]Monot ...

随机推荐

  1. vue生命周期-标注

    作者:FlyDragon 出处:http://www.cnblogs.com/fly_dragon/ 关于作者:专注于微软平台项目架构.管理和企业解决方案.如有问题或建议,请多多赐教! 本文版权归作者 ...

  2. FromBase64String(String)和Encoding.Default.GetBytes(String)

    今天突然被问FromBase64String(String)和Encoding.Default.GetBytes(String)有啥区别,我刚开始学C#对这个一脸懵逼,于是总结一下今天查资料的内容. ...

  3. 【leetcode】939. Minimum Area Rectangle

    题目如下: Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from t ...

  4. 调试Android有什么错误

    项目目录的cmd调试查看有什么错误 gradlew processDebugManifest --stacktrace

  5. NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条

    半年前在一些QQ群看到有大神NX二次开发做出了进度条,那个时候我还不会弄,也不知道怎么弄得,后来断断续续得研究了一下,直到今天我把它做出来了.内心还是很喜悦的!回想自己这两年当初从没公司肯给我做NX二 ...

  6. SQL语句常用优化技巧

    提高SQL语句的执行效率,最常见的方法就是建立索引,以及尽量避免全表扫描. ①.避免在where子句中使用 is null 或 is not null 对字段进行判断. 如:select id fro ...

  7. (转)OpenFire源码学习之十三:消息处理

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43417817 消息处理流程总揽(该图来源于互联网,图片很大,不过类容还是挺清楚的.不方便 ...

  8. RF中alert的处理

    那么在robotframework中如何处理呢? 我在测试过程中遇到了这么一个窗口: 这种应该是属于Confirm 类型,是无法定位到的,在robotframework中需要这样处理: 1.虽然无法定 ...

  9. base64图片下载

    下面这种写法有些chrome不起作用 downLoadCanvas (data, filename = '活动.png') { var saveLink = document.createElemen ...

  10. 54-Ubuntu-打包压缩-4-bzip2压缩和解压缩介绍

    bzip2 tar和bizp2命令结合可以实现文件打包和压缩 tar只负责打包,但不压缩 用bzip2压缩tar打包后的文件,其扩展名一般为xxx.tar.bz2 在tar命令有一个选项-j可以调用b ...