连续不知道多少场了,都是一场10名以内一场20以外。。。波动极大。。。还极有规律。。。

拿到这套题,看到T1大模拟无话可说。

然后考场上我觉得T2很简单。。。。然后就码了两个半小时。

T3数据水了暴力70。。。

T1:砖块

大模拟。其实也不大。。。

记录上下左右前后边界然后滚就是了

闲得慌打hash_map

 #include<cstdio>
#include<iostream>
using namespace std;
#define P(a,b) make_pair(a,b)
struct hash_map{
int fir[],l[],tox[],toy[],v[],cnt;
#define mod 100003
int& operator[](pair<int,int>p){
int x=p.first,y=p.second,hsh=(x*y%mod+mod)%mod;
for(int i=fir[hsh];i;i=l[i])if(tox[i]==x&&toy[i]==y)return v[i];
l[++cnt]=fir[hsh];fir[hsh]=cnt;tox[cnt]=x;toy[cnt]=y;v[cnt]=;return v[cnt];
}
void clear(){for(int i=;i<mod;++i)fir[i]=;cnt=;}
}m;
int mxt,u,l,r,f,b;char s[];
void n_turn(){
int U=u,L=l,R=r,F=f,B=b;
u=B-F;f=B;b=B+U;
for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);}
}
void s_turn(){
int U=u,L=l,R=r,F=f,B=b;
u=B-F;b=F;f=F-U;
for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);}
}
void w_turn(){
int U=u,L=l,R=r,F=f,B=b;
u=R-L;r=L;l=L-U;
for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);}
}
void e_turn(){
int U=u,L=l,R=r,F=f,B=b;
u=R-L;l=R;r=R+U;
for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);}
}
int main(){//freopen("ex_block2.in","r",stdin);
int t;scanf("%d",&t);
while(t--){
l=,r=,f=,b=,mxt=;scanf("%d%s",&u,s);m.clear();m[P(,)]++;
for(int i=;s[i];++i)
if(s[i]=='N')n_turn();
else if(s[i]=='E')e_turn();
else if(s[i]=='W')w_turn();
else if(s[i]=='S')s_turn();
for(int i=l;i<r;++i)for(int j=f;j<b;++j)printf("%d ",i);puts("");
for(int i=l;i<r;++i)for(int j=f;j<b;++j)printf("%d ",j);puts("");
printf("%d\n",mxt);
}
}

T2:数字

比较神仙。

高精还是要打的,但是只需要读入,除2和5的倍数的低精数,模同理,以及大于号。。。

模的话直接取最低位返回就行。。。emm我是万进制的

设Ext(a,b)是b除去所有因子a后剩下的数,那么题目就是求Ext(10,n!)%10k

直觉,可以CRT。分成2和5处理。

绝大多数情况下因子2都严格比5多,所以Ext(10,n!)%2==0

现在只需要求出Ext(5,n!)%10k

那么分解1000就是8×125。对于8其因子数也很多所以最后乘逆元。

问题就变成求Ext mod125的答案了。

可以把阶乘里能整除5的和不能的分开考虑,而能被整除的部分就是Ext(5,(n/5)!),递归处理。

可以发现Ext之后阶乘操作其实是循环的,因为mod125所以每125位就循环了。

循环的部分可以快速幂处理。剩余部分可以预处理。

我知道这作为一个题解过于草率,没时间了溜了。

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s[];int l,k;const int mod[]={,,,},m5[]={,,,};int fac[],FAC[];
struct bigint{
int a[],ws;
void get(){
ws=(l-)/+;for(int i=;i<=;++i)a[i]=;
for(int i=;i<ws;++i)a[i]=s[l-*i]*+s[l-*i+]*+s[l-*i+]*+s[l-*i+];
for(int i=;i<=(l-)%+;++i)a[ws]=a[ws]*+s[i-];
}
void operator/=(int k){
for(int i=ws;i;--i)a[i-]+=a[i]%k*,a[i]/=k;
while(!a[ws]&&ws)ws--;
}
int operator%(int k){return a[]%k;}
bool operator>(int k){return ws>||a[]>k;}
}n,m;
int pow(int b,int t,int mod,int a=){for(;t;t>>=,b=b*b%mod)if(t&)a=a*b%mod;return a;}
int Ext(bigint n){
if(n>);else return fac[n.a[]];
int x=n%;n/=;int K=Ext(n);n/=;
return K*pow(FAC[],n%,)%*FAC[x]%;
}
void put(int x,int k){for(int i=k;i;--i)if(x%mod[i]/mod[i-]==)putchar();else break;printf("%d\n",x%mod[k]);}
int main(){//freopen("t2.in","r",stdin);freopen("t2.out","w",stdout);
fac[]=FAC[]=;for(int i=;i<=;++i){int j=i;while(j%==)j/=;fac[i]=fac[i-]*j%;FAC[i]=FAC[i-]*(i%==?:i)%;}
int ans,t,tot;scanf("%d",&t);
while(t--){
scanf("%s%d",s,&k);l=strlen(s);
for(int i=;i<l;++i)s[i]-=;
n.get();ans=Ext(n);
if(l==&&n.a[]<=){int a=;for(int i=;i<=n.a[];++i)a*=i;if(a%==)a/=;put(a,k);continue;}
m=n;tot=;
while(m.ws)m/=,(tot+=m%)%=;
ans*=pow(,tot,);ans%=;
for(int i=;i<;i+=)if(i%==ans)put(i,k);
}
}

T3:甜圈

考察的思路很不错啊。

因为不能多不能少不能乱序,所以很符合字符串的性质。

因为要区间操作,所以方便快捷的hash。

那么就变成了区间加区间乘的线段树啦!

(居然还有人不会线段树板子%%%)

 #include<cstdio>
int cl[],cr[],ans;
unsigned long long hsh[],lzm[],lza[],HSH;
void build(int p,int l,int r){
cl[p]=l;cr[p]=r;lzm[p]=;
if(l==r)return;
build(p<<,l,l+r>>);build(p<<|,(l+r>>)+,r);
}
void down(int p){
hsh[p<<]*=lzm[p];hsh[p<<|]*=lzm[p];
lzm[p<<]*=lzm[p];lzm[p<<|]*=lzm[p];
lza[p<<]*=lzm[p];lza[p<<|]*=lzm[p];
hsh[p<<]+=lza[p];hsh[p<<|]+=lza[p];
lza[p<<]+=lza[p];lza[p<<|]+=lza[p];
lza[p]=;lzm[p]=;
}
void chg(int p,int l,int r,int w){
if(l<=cl[p]&&cr[p]<=r){hsh[p]=hsh[p]*+w;lza[p]*=;lzm[p]*=;lza[p]+=w;return;}
if(lza[p]||lzm[p]!=)down(p);
if(l<=cr[p<<])chg(p<<,l,r,w);
if(r>=cl[p<<|])chg(p<<|,l,r,w);
}
void ask(int p){
if(cl[p]==cr[p]){ans+=HSH==hsh[p];return;}
if(lza[p]||lzm[p]!=)down(p);
ask(p<<);ask(p<<|);
}
int main(){
int n,t,l,r,w,k;
scanf("%d%d%d",&n,&k,&t);
build(,,n);
while(t--)scanf("%d%d%d",&l,&r,&w),chg(,l,r,w);
for(int i=;i<=k;++i)HSH=HSH*+i;
ask();printf("%d\n",ans);
}

[考试反思]1005csp-s模拟测试61:休止的更多相关文章

  1. [考试反思]0718 NOIP模拟测试5

    最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...

  2. csp-s模拟测试61砖块, 数字,甜圈题解

    题面:https://www.cnblogs.com/Juve/articles/11626350.html 砖块: 直接模拟即可,map统计被覆盖的次数 #include<iostream&g ...

  3. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  4. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  5. [考试反思]0909csp-s模拟测试41:反典

    说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...

  6. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  7. [考试反思]0714/0716,NOIP模拟测试3/4

    这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...

  8. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

  9. [考试反思]0816NOIP模拟测试23

    210 210 210 170 还可以.暴力打满就rk4了? 但不管怎么说,总算是在改完题之后理直气壮的写考试反思了. T1是个dp,说水也不太水.(当然某脸只要A掉了一道题就要说那是水题) 我的思路 ...

随机推荐

  1. Java 学习笔记之 线程interrupt方法

    线程interrupt方法: interrupt方法是用来停止线程的,但是他的使用效果并不像for+break那样,马上就停止循环. 调用interrupt()其实仅仅是在当前线程中打了一个停止标记, ...

  2. Spark 学习笔记之 MONGODB SPARK CONNECTOR 插入性能测试

    MONGODB SPARK CONNECTOR 测试数据量: 测试结果: 116万数据通过4个表的join,从SQL Server查出,耗时1分多.MongoSparkConnector插入平均耗时: ...

  3. MongoDB 学习笔记之 入门安装和配置

    下载MongoDB: 下载解压即可使用. 为了启动方便和统一管理, 在Mongo根目录下建立/data, /logs, /conf文件夹. 在conf文件夹下建立mongodb.conf 文件,基本配 ...

  4. 从零开始的vue学习笔记(四)

    组件注册 组件名 Vue.component('my-component-name', { /* ... */ }) 这里的my-component-name就是组件名,组件名的取法可以参考指南 ke ...

  5. kali切换到西电源

    准备研究kali的openvas,打开发现居然没有.apt-get更新一下结果各种报错,换成中科大源.阿里源还是始终报错,气到吐血.最后上西电开源社区换成了西电的kali源,更新速度2m多,一气呵成~ ...

  6. 做高逼格程序员之说走就走的「Windows」

    简介:随着移动固态硬盘越来越便宜,网上逐渐出来一个黑科技.Windows To GO见名知意.简单来说就是在U盘或者是移动固态硬盘上安装Windows系统.达到即插即用. WTG 简介 Windows ...

  7. 一文掌握在Word中快速编写公式

    在使用Word编写文章时,总会遇到书写数学公式的情况.使用Word的公式输入工具需要频繁地使用鼠标,因而编写公式会显得繁琐麻烦,那么有什么办法可以优雅地在Word中书写公式呢?其实Word早在Word ...

  8. python编程基础之五

    转义字符:就是不方便从键盘之间输出,或者是原字符有特殊含义的一些字符, 下面列举几个常用的转义字符 \',\",\''',\""",\\,都是表示原字符的意思, ...

  9. 超级好用的 Java 数据可视化库:Tablesaw

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和使用 Tablesaw 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出 ...

  10. 素数与Miller-Rabin测试

    素数及其性质 素数又称质数.指整数在一个大于 111 的自然数中,除了 111 和此整数自身外,没法被其他自然数整除的数. 性质1 有无穷多个素数. 证明: 用反证法.设已知的最大素数为 PPP,考虑 ...