交文件吼啊。
ZJ一下:
T1是真·高中数学。
T2不是很清楚,只得了30。
T3打了一个欧拉序。
做的海星的地方:
- Vim太好用辣,直接按平常打叫上去它就是 freopen
- T1仔仔细细的研究了高考数学
- T1的python写的挺好。
问题:
- T2写了一个错解还没发现QAQ。
- T1可以打表但是没试……
TJ:
显然没改完题就来写博客是没脸行为
T1
高考数学。
数学老师告诉我们,遇到比较的问题可以:
- 比差
- 比商
- 乱搞转换
于是本题可以选下。
做法0:Python
T=int(input()); for i in range(0,T): [a,b]=map(int,input().split()); c=1; for j in range(1,b+1): c=c*j; if(a**b <= c): print("Yes"); else: print("No");
做法1:比差
人口普查。
做法2:比商
得分$[60,100]$分不等。
$60$,直接比.
$90$,发现炸精了,于是先将后面的$[X,Y]$区间全搞上,然后再乘$[1,X)$的,这样在精度要求不高的点上可以得出正确答案。
$100$,分组。
做法3:转换
数学老师告诉我们,遇到指数可以使用$log$。
于是比较$log(X^Y)$和$log(Y!)$
继续化:$Ylog(X)$和$sumlimits_{i=1}^{Y} log(i)$
真好。
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> int main(){ #ifndef LOCAL freopen("yuuutsu.in" ,"r",stdin); freopen("yuuutsu.out","w",stdout); #endif std::ios_base::sync_with_stdio(false); int T,a,b; std::cin>>T; while(T--){ std::cin>>a>>b; double la=b*log(a),lb=0; for(int i=1;i<=b;i++){ lb+=log(i); } if(la<=lb)puts("Yes"); else puts("No"); } }
T2
仔细想下……
首先如果要区间修你会想到什么呢?
线段树,树状数组……
于是漏了。
可以用$mathsf{ODT}$(滑稽
还有什么?
差分。
手摸一些样例会发现一个神奇的性质,
图有点大,见谅。
差分上修改区间正好差$k$,于是有什么?
把差分数组每隔$k$的值加在一起是$0$
如果不是呢?那就一定非法。
于是使用$\%$法!
真巧妙啊……(别问我为什么叫 magic_arr )(译:魔法数组)
#include <iostream> #include <cstring> #include <cstdio> #define N 2222222 #define LL long long using namespace std; int pn,k,qn; LL pre[N],val[N]; int not0n=0; LL magic_arr[N]; int main(){ #ifndef LOCAL freopen("august.in" ,"r",stdin); freopen("august.out","w",stdout); #endif int a,b; cin.sync_with_stdio(false); cin>>pn>>k>>qn; for(int i=1;i<=pn;i++){ cin>>val[i]; pre[i]=val[i]-val[i-1]; magic_arr[i%k]+=pre[i]; } pre[pn+1]=val[pn+1]-val[pn]; magic_arr[(pn+1)%k]+=pre[pn+1]; for(int i=0;i<k;i++) if(magic_arr[i]!=0) not0n++; if(not0n)puts("No"); else puts("Yes"); for(int i=1;i<=qn;i++){ cin>>a>>b; int nn=int(magic_arr[a%k]!=0)+int(magic_arr[(a+1)%k]!=0); magic_arr[a%k]+=b; magic_arr[(a+1)%k]-=b; not0n+=int(magic_arr[a%k]!=0)+int(magic_arr[(a+1)%k]!=0)-nn; if(not0n)puts("No"); else puts("Yes"); } }
T3
(加载中)