期望得分:60+60+60

实际得分:60+60+0

这次考试主要是T3搜索打挂了(我可是靠搜索吃饭的);

1.数组开小了,不过开大数组只拿到了10分的好成绩。

2.题意没审清(其实是他没说清)。

以后搜索不能打打挂了。

T1 方程的解:特判+exgcd

一看题就打了个exgcd,最后把exgcd删了骗了60分

但我们用exgcd是可以做的=_=(废话)。

考虑这个一次函数,然后就把纵截距和斜率一通特判AC >_<

 #include<cstdio>
#include<iostream>
#define ll long long
using namespace std;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b)
{
x=;
y=;
return a;
}
ll d=exgcd(b,a%b,x,y);
ll tmp=x;
x=y;
y=tmp-a/b*y;
return d;
}
int main()
{
#define C continue
ll t;
scanf("%lld",&t);
while(t--)
{
ll x,y,a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
if(!a&&!b)
{
if(!c)puts("ZenMeZheMeDuo");
else puts("");
C;
}
else if(!c)
{
if(!a&&!b)puts("ZenMeZheMeDuo");
else if(a*b>)puts("");
else puts("ZenMeZheMeDuo");
C;
}
else if(!a)
{
if(c%b==&&b&&b*c>)puts("ZenMeZheMeDuo");
else puts("");
}
else if(!b)
{
if(c%a==&&c&&a*c>)puts("ZenMeZheMeDuo");
else puts("");
C;
}
else if(a==&&b==)
{
if(c<=)puts("");
else if(c>)puts("ZenMeZheMeDuo");
else printf("%lld\n",c-);
C;
}
else if(a+b==c){puts("");C;}
else
{
if(a>&&b>&&c<){puts("");C;}
else if(a<&&b<&&c>){puts("");C;}
else
{
if(a<&&b<&&c<)a=-a,b=-b,c=-c;
ll gcd=exgcd(a,b,x,y);
if(c%gcd!=){puts("");C;}
else if(a*b<){puts("ZenMeZheMeDuo");}
else
{
//cout<<x<<endl;
x=(x%b+b)%b;
x*=(c/gcd);
x%=(b/gcd);
if(!x)x+=(b/gcd);
y=(c-a*x)/b;
if(y<=){puts("");continue;}
ll num=y/(a/gcd)+;
if(y%(a/gcd)==)num--;
if(num<=65535ll)printf("%lld\n",num);
else puts("ZenMeZheMeDuo");
}
} }
}
return ;
}

感谢mikufun的AC代码

T2 visit:组合数学+CRT

考试的时候推出式子了,也想到CRT了。

(嘿嘿刚才搬了好多吃的,发家致富!!!)

好啦继续说,但我不会打CRT板子(摆手)。

所以只能骗60分。

公式 ans=∑C(T,a)*C(T-a,b)*C(T-a-b,c)*C(T-a-b-c,d) (a+b+c+d==T&&a-b==n&&b-c==m)

大概说一下我的思路,以n,m均大于零为例

如果T=n+m,那么答案显然,C(T,n)。

如果T更小,显然无解

考虑T>n+m,因为最后一定要到n,m,所以如果你多往前走一步就一定会对应地往后走一步,左右同理。

由此可得:a-b=n,c-d=m(不用管a,b,c,d是神魔)然后就可以AC了

 #include<cstdio>
#include<iostream>
#define MAXN 100005
#define ll long long
#include<cmath>
#define maxn 205
#define mod prime[num]
using namespace std;
ll t,js[MAXN],inv[MAXN],prime[],tot,m,num,w[];
ll abs(ll x)
{
return x<0ll?(-1ll*x):x;
}
ll qpower(ll a,ll b)
{
ll ans=;
while(b)
{
if(b&)ans=ans*a%mod;
a=a*a%mod;
b>>=;
}
return ans%mod;
}
void PP()
{
ll x=m;
for(ll i=;i<=sqrt(m)+;i++)
{
if(x==)break;
if(x%i==)prime[++tot]=i,x/=i;
}
if(x>)prime[++tot]=x;
return ;
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b)
{
x=;
y=;
return ;
}
exgcd(b,a%b,x,y);
ll tmp=x;
x=y;
y=tmp-a/b*y;
return ;
}
ll crt()
{
ll ans=;
for(ll i=;i<=tot;i++)
{
ll xi=m/prime[i],x,y;
exgcd(xi,prime[i],x,y);
x=(x%prime[i]+prime[i])%prime[i];
ans=(ans+x*w[i]*xi)%m;
}
return ans%m;
}
void pre()
{
js[]=inv[]=;
for(ll i=;i<=min(mod,100000ll);i++)
{
js[i]=js[i-]*i%mod;
inv[i]=qpower(js[i],mod-);
}
return ;
}
ll C(ll n,ll m)
{
if(m==||m==n)return 1ll;
if(m>n)return 0ll;
return js[n]*inv[n-m]%mod*inv[m]%mod;
}
ll lucas(ll n,ll m)
{
if(m==||m==n)return 1ll;
if(m>n)return 0ll;
return C(n%mod,m%mod)*lucas(n/mod,m/mod)%mod;
}
int main()
{
ll a,b,c=,d=,ans=;
scanf("%lld%lld%lld%lld",&t,&m,&a,&b);
a=abs(a);b=abs(b);
if(m==){puts("");return ;}
ll k=t-abs(a)-abs(b);
if(k<||(k&)^){puts("");return ;}
k/=;PP();
for(num=;num<=tot;num++)
{
pre();
for(ll i=;i<=k;i++)
{
a+=i;
c+=i;
b+=(k-i);
d+=(k-i);
(w[num]+=lucas(t,a)*lucas(t-a,b)%mod*lucas(t-a-b,c)%mod*lucas(t-a-b-c,d)%mod)%=mod;
a-=i;
c-=i;
b-=(k-i);
d-=(k-i);
}
}
printf("%lld\n",crt());
return ;
}

T3 光:模拟+二分优化

我感觉这个题就是sb

但是不管怎么说,代码能力是很重要的一部分。

这个题有几个引理值得一提:

1.对于一个格子来说,之可能被(东南&&西北)||(东北&&西南)经过 证明:光线每次移动,其(x+y)||(x-y)奇偶性不变

我们可以画一个形象的图(自行)理解一下。

2.光线的碰撞反射次数只与n,m,k线性相关,这就不用我证明了叭。

3.光线的路径一定是一个环,所以它一定会回到初始状态,这可以作为终止边界。

在用。。。就是细心,耐心和lower_bound,upper_bound的应用了。

 #include<bits/stdc++.h>
#define MAXN 200500
#define ll long long
#define mp make_pair
using namespace std;
vector<int>v1[MAXN*],v2[MAXN*];
map< pair<int,int>,bool >py;
ll ans;int n,m,k,sta,stb,sts,nn=,tot;
bool ok=,Getans=;
void search(int x,int y,int now)// 1 youshang 2 zuoxia 3 youxia 4 zuoshang
{
if(Getans)return ;
if(now==)
{
int id=x+y;bool za=,zb=;
int nxtx=(*--upper_bound(v1[id].begin(),v1[id].end(),x))+;
int nxty=id-nxtx;
if(sta+stb==id&&sta>=nxtx&&sta<=x&&sts==){nn++;if(nn!=){ans+=abs(sta-x);Getans=;return ;}}
ans+=abs(x-nxtx)+;
if(py[mp(nxtx,nxty+)])za=;if(py[mp(nxtx-,nxty)])zb=;
if(!za&&zb)search(nxtx,nxty+,);
else if(za&&!zb)search(nxtx-,nxty,);
else if(!za&&!zb){ok=;search(nxtx,nxty,);}
else {ok=;search(nxtx,nxty,);}
return ;
}
if(now==)
{
int id=x+y;bool za=,zb=;
int nxtx=(*upper_bound(v1[id].begin(),v1[id].end(),x))-;
int nxty=id-nxtx;
if(sta+stb==id&&sta>=x&&sta<=nxtx&&sts==){nn++;if(nn!=){ans+=abs(sta-x);Getans=;return ;}}
ans+=abs(x-nxtx)+;
if(py[mp(nxtx+,nxty)])za=;if(py[mp(nxtx,nxty-)])zb=;
if(!za&&zb)search(nxtx+,nxty,);
else if(za&&!zb)search(nxtx,nxty-,);
else if(!za&&!zb){ok=;search(nxtx,nxty,);}
else {ok=;search(nxtx,nxty,);}
return ;
}
if(now==)
{
int id=x-y+m+;bool za=,zb=;
int nxtx=(*upper_bound(v2[id].begin(),v2[id].end(),x))-;
int nxty=nxtx+m+-id;
if(sta-stb+m+==id&&sta<=nxtx&&sta>=x&&sts==){nn++;if(nn!=){ans+=abs(sta-x);Getans=;return ;}}
ans+=abs(x-nxtx)+;
if(py[mp(nxtx+,nxty)])za=;if(py[mp(nxtx,nxty+)])zb=;
if(!za&&zb)search(nxtx+,nxty,);
else if(za&&!zb)search(nxtx,nxty+,);
else if(!za&&!zb){ok=;search(nxtx,nxty,);}
else {ok=;search(nxtx,nxty,);}
return ;
}
if(now==)
{
int id=x-y+m+;bool za=,zb=;
int nxtx=(*--upper_bound(v2[id].begin(),v2[id].end(),x))+;
int nxty=nxtx+m+-id;
if(sta-stb+m+==id&&sta>=nxtx&&sta<=x&&sts==){nn++;if(nn!=){ans+=abs(sta-x);Getans=;return ;}}
ans+=abs(x-nxtx)+;
if(py[mp(nxtx-,nxty)])za=;if(py[mp(nxtx,nxty-)])zb=;
if(!za&&zb)search(nxtx-,nxty,);
else if(za&&!zb)search(nxtx,nxty-,);
else if(!za&&!zb){ok=;search(nxtx,nxty,);}
else {ok=;search(nxtx,nxty,);}
return ;
}
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
while(k--)
{
int a,b;
scanf("%d%d",&a,&b);
v1[a+b].push_back(a);
v2[a-b+m+].push_back(a);
py[mp(a,b)]=;
}
for(int i=;i<=n+;i++)
{
v1[i].push_back(i);
v2[i+m+].push_back(i);
v1[i+m+].push_back(i);
v2[i].push_back(i);
py[mp(i,)]=;py[mp(i,m+)]=;
}
for(int i=;i<=m+;i++)
{
v1[i].push_back();
v2[m+-i].push_back();
v1[i+n+].push_back(n+);
v2[n+-i+m+].push_back(n+);
py[mp(,i)]=;py[mp(n+,i)]=;
}
for(int i=;i<=n+m+;i++)sort(v1[i].begin(),v1[i].end());
for(int i=;i<=n+m+;i++)sort(v2[i].begin(),v2[i].end());
string ss;
cin>>sta>>stb>>ss;
if(ss=="NE")sts=,search(sta,stb,);
else if(ss=="NW")sts=,search(sta,stb,);
else if(ss=="SE")sts=,search(sta,stb,);
else if(ss=="SW")sts=,search(sta,stb,);
cout<<(ok==?(ans/):ans)<<endl;
return ;
}

总结:暴力不能打挂,模板必须理解

NOIP模拟测试7的更多相关文章

  1. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  2. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  3. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

  4. 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

    2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...

  5. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

  6. NOIP模拟测试1(2017081501)

    好,今天是cgg第一次举行模拟测试,希望各位支持. 时间限制:2小时 题目链接: 题目一:水得都没名字了 题目二:车站 题目三:选数 不要觉得2小时太少,我的题目很良心,都很简单. 答案可以在模拟测试 ...

  7. 「题解」NOIP模拟测试题解乱写I(29-31)

    NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...

  8. 2019.8.14 NOIP模拟测试21 反思总结

    模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...

  9. 2019.8.9 NOIP模拟测试15 反思总结

    日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...

  10. 2019.8.1 NOIP模拟测试11 反思总结

    延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...

随机推荐

  1. Django学习之model进阶

    一 QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句.   >>> Entry.objects.al ...

  2. 究竟是.NET淹没在汪洋大海,还是人心的浮躁、见识的短浅?

    这些年来有相当多的.net开发者转了其他语言,也有一部分是迫不得已因为公司的转型而转,其中也有一大部分觉得.net没前途性能不好比某些语言性能差.还有一部分会说出一些名词去指责.net说他做不到,其实 ...

  3. asp.net core刷新css缓存

    在非spa程序开发的时候.css经常会因为浏览器的缓存机制导致不刷新. 很多前端为了应对这个问题,都会引入webpack或者gulp等工具来处理css缓存的问题. 但是作为一个偏服务器端的程序员来说. ...

  4. B-概率论-熵和信息增益

    目录 熵和信息增益 一.熵(Entropy) 二.条件熵(Conditional Entropy) 三.联合熵(Joint Entropy) 四.相对熵(Relative Entropy) 4.1 相 ...

  5. 分享Python知识的第三天

    python第一节 1.变量 变量,是用于在内存中存放程序数据的容器 计算机的核心为"计算",计算便需要数据源,数据源要存在内存中方便使用,这时就要用到变量,比如把某人吗名字,年龄 ...

  6. DG常用运维命令及常见问题解决

    DG常见运维命令及常见问题解决方法 l> DG库启动.关闭标准操作Dataguard关闭1).先取消日志应用alter database recover managed standby data ...

  7. 利用pyecharts将数据可视化

    可视化展示在数据分析领域中是一个至关重要的点,好的可视化展示对我们的结果分析有更好的支持作用. 一.问题 在数据分析的时代里面我们需要将数据的可视化展现出来,更加方便用户的观察.如下图 有些时候我们需 ...

  8. 使用Swagger服务搭建.Net Core API

    使用Swagger服务搭建.Net Core API 创建.Net Core API 新建项目.文件——新建——项目 选择应用程序模板. 设置存放路径,命名方案名称. 创建API. 搭建成功. 使用S ...

  9. 程序猿的产品思考:2C与2B产品思维的区别

    原创/朱季谦   我最早接触到互联网产品的时候,听到最多的,是做产品要有用户思维,即站在用户角度去看待产品.这个先入为主的概念,在很长一段时间里,都被我效作经典.然而也在很长一段时间里,我竟混淆了其中 ...

  10. Java的事件自定义事件学习

    课程设计要做一个游戏,由于对C++不是很熟悉,老师也准许使用java 或者其他的语言,在.net我学过事件,一种委托回调,但是在java 我不是很了解,应该原理都相同吧! 游戏大致是这样的,现在这在写 ...