Comet OJ - Contest #11题解】的更多相关文章

Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最小值)和原数最低位的差. 令$S$为输入数字串,则答案为 $(\min_{i=1}^{n}S_i-S_n)%10$ . 时间复杂度 $O(n)$ . B.usiness -Problem designed by Winniechen- 这是一个很显然的动态规划问题. 令$g_{i,j}$表示第$i$…
传送门 \(A\) 咕咕咕 const int N=1e6+5; char s[N],t[N];int n,res; inline bool cmp(const int &x,const int &y){return x>y;} int main(){ scanf("%s",s+1),n=strlen(s+1); fp(i,1,n)t[i]=s[i];sort(t+1,t+1+n,cmp); fp(i,1,n)res=(res*10+t[i]-s[i]),res=…
传送门. 题解: 考虑若最后的总伤害数是s,那么就挡板分配一下,方案数是\(C_{s-1}^{n-1}\). 那么问题在于总伤害数很大,不能一个一个的算. \(C_{s-1}^{n-1}\)的OGF是\({x^{n-1}\over (1-x)^n}\) 由\(F=FA+R->F={R \over 1-A}\) 得到递推式\(A=1-(1-x)^n\),前面的项可以用组合数算出. 那么每次就是常系数齐次递推,每次搞的时候取模就好了. 复杂度是\(O(log^2)\) 题解给出了更加巧妙的方法,我们…
传送门 菜爆了--总共只有一道题会做的--而且也没有短裙好难过 为啥必须得有手机才能注册账号啊喂--歧视么-- \(A\) 解方程 推一下柿子大概就是 \[x-\sqrt{n}=y+z+2\sqrt{yz}\] 如果\(\sqrt{n}\)是无理数,那么就是 \[x=y+z,{n\over 4}=yz\] 那么要满足\(n\)必须是\(4\)的倍数,然后爆搜\({n\over 4}\)的因子,统计答案就行了 如果\(n\)不是无理数,那么 \[x=\sqrt{n}+(y-z)^2\] 这东西一看…
传送门 太菜了连\(D\)都做不出来没有小裙子\(QAQ\) \(A\) 暴力把所有的数对都算出来,然后\(sort\)一下就行了 const int N=505; int a[N],st[N*N],top,n,k;ll res; int main(){ scanf("%d%d",&n,&k); fp(i,1,n)scanf("%d",&a[i]); fp(i,1,n)fp(j,i+1,n)st[++top]=a[i]+a[j]; sort(…
###题目链接### 题目大意:一开始手上有 0 个节点,有 n 天抉择,m 种方案,在每天中可以选择任意种方案.任意次地花费 x 个节点(手上的节点数不能为负),使得在 n 天结束后,获得 y 个节点. 其次,在每天结束后,会根据自己手上所具有的节点数来获得一些节点,设当天结束后所拥有 x 个节点,那么将获得 f(x) 个节点. 分析: 1.将全过程分为 n 天,每天开始有一定的节点数,然后 DP 求得花费后的最大价值(这个最大价值指的是,n 天结束后仅返还获得的最大节点数).故设 dp[i]…
传送门 既然没参加过就没有什么小裙子不小裙子的了-- 顺便全是概率期望真是劲啊-- 因自过去而至的残响起舞 \(k\)增长非常快,大力模拟一下就行了 int main(){ scanf("%lld",&x),sum=2; if(x==1)return puts("2"),0; fp(i,3,19260817){ sum+=(sum>>1); if(sum>x)return printf("%d\n",i),0; } re…
传送门 \(A\) 咕咕 const int N=1005; int a[N],n,T; int main(){ for(scanf("%d",&T);T;--T){ scanf("%d",&n); fp(i,1,10)a[i]=n%10,n/=10; R int fl=1; fp(i,1,9)if(a[i]<a[i+1]){fl=0;break;} if(!fl)puts("Impossible"); else print…
传送门 \(A\) 咕咕咕 const int N=1005; char s[N][N];int len[N],n,id; inline bool cmp(R int j,R int k){ R int l=min(len[j],len[k]); fp(i,1,l)if(s[j][i]!=s[k][i])return s[j][i]<s[k][i]; return len[j]<len[k]; } int main(){ scanf("%d",&n),id=1; f…
Code: #include <bits/stdc++.h> #define N 1005 #define M 2000 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int A[N],B[N],w[M+3],f[M+3]; int main() { // setIO("input"); int n,m,k,i,j,ans=0; scanf("…