2018.09.09 DL24 Day2总结
今天挂的有点惨……
T1.forging
这道题自己在考试的时候想出来了……
这题是一个期望递推。我们首先考虑这么一件事,一枚硬币,你抛到正面停止,抛到反面继续抛,问期望抛的次数。是两次。我们假设期望抛x次,因为期望对于后面没有影响,所以有如下方程:
x = 0.5 × 0 + 0.5 × x + 1,x = 2.
那么我们就可以通过当前合成的概率知道合成的期望次数了。然后一次合成我们需要一把i级的武器,我们只需要1把i-2级的武器和期望次数把的i-1级的武器,所以我们就可以这样递推计算,然后结束。
结果一是因为自己智障的在两个0级刀合成的时候忘记取max,加上自己空间开的过大,100变0分可还行。
看下std……自己改完的代码好像丢了……
- #include<cmath>
- #include<cstdio>
- #include<cctype>
- #include<algorithm>
- using namespace std;
- typedef long long ll;
- const int p=;
- const int N=1e7+;
- inline int read(){
- int X=,w=;char ch=;
- while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
- while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
- return w?-X:X;
- }
- int inv[N],b[N],c[N],f[N];
- inline int sub(int x,int y){
- x-=y;if(x<)x+=p;return x;
- }
- int main(){
- freopen("forging.in","r",stdin);freopen("forging.out","w",stdout);
- inv[]=;
- for(int i=;i<N;i++)inv[i]=(ll)(p-p/i)*inv[p%i]%p;
- int n=read();f[]=read();
- int bx=read(),by=read(),cx=read(),cy=read(),mod=read();
- b[]=by+;c[]=cy+;
- for(int i=;i<n;i++){
- b[i]=((ll)b[i-]*bx+by)%mod+;
- c[i]=((ll)c[i-]*cx+cy)%mod+;
- }
- f[]=(ll)((ll)c[]*inv[min(b[],c[])]%p+)*f[]%p;
- for(int i=;i<=n;i++)
- f[i]=((ll)c[i-]*inv[min(b[i-],c[i-])]%p*f[i-]%p+f[i-])%p;
- printf("%d\n",f[n]);
- return ;
- }
T2.division
这道题当时做的时候没想出来什么……于是好像写了个暴力骗了20。
后来学姐说是CRT……?没大听懂,copy一下题解……
std:
- #include <bits/stdc++.h>
- #define enter putchar('\n')
- #define space putchar(' ')
- using namespace std;
- template<class T>
- void read(T &res)
- {
- res = ;
- char c = getchar();
- T f = ;
- while(c < '' || c > '')
- {
- if(c == '-') f = -;
- c = getchar();
- }
- while(c >= '' && c <= '')
- {
- res = res * + c - '';
- c = getchar();
- }
- res *= f;
- }
- template<class T>
- void out(T x)
- {
- if(x < )
- {
- putchar('-');
- x = -x;
- }
- if(x >= )
- {
- out(x / );
- }
- putchar('' + x % );
- }
- int id;
- int a[],tot,prime[];
- bool nonprime[];
- int mul(int a,int b,int MOD)
- {
- return 1LL * a * b % MOD;
- }
- int fpow(int x,int c,int MOD)
- {
- int res = ,t = x;
- while(c)
- {
- if(c & ) res = res * t % MOD;
- t = t * t % MOD;
- c >>= ;
- }
- return res;
- }
- int Calc(int p,int m)
- {
- memset(nonprime,,sizeof(nonprime));
- tot = ;
- a[] = ;
- a[p] = ;
- for(int i = ; i < p ; ++i)
- {
- if(!nonprime[i])
- {
- a[i] = fpow(i,m,p);
- prime[++tot] = i;
- }
- for(int j = ; j <= tot ; ++j)
- {
- if(i * prime[j] > ) break;
- a[i * prime[j]] = a[i] * a[prime[j]] % p;
- nonprime[i * prime[j]] = ;
- if(i % prime[j] == ) break;
- }
- }
- int res = ;
- for(int i = ; i <= p ; ++i)
- {
- int t = a[i] - i + p;
- if(t >= p) t -= p;
- res += (t == );
- }
- return res;
- }
- void Solve()
- {
- int ans = ;
- int c,m;
- read(c);
- read(m);
- int p = ;
- for(int i = ; i <= c ; ++i)
- {
- read(p);
- ans = mul(ans,Calc(p,m),);
- }
- out(ans);
- enter;
- }
- int main()
- {
- freopen("division.in","r",stdin);
- freopen("division.out","w",stdout);
- read(id);
- int T;
- read(T);
- while(T--) Solve();
- }
T3.money
这道题仍然是不会的状态……考试的时候骗到了10分。
正解是用倍增求出链上最小值,然后合并的时候启发式合并,用倍增记一下边的方向(???)
表示还是不懂……看一下std吧orz
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- #include <iostream>
- #include <cassert>
- #define space putchar(' ')
- #define enter putchar('\n')
- typedef long long ll;
- using namespace std;
- template <class T>
- void read(T &x){
- char c;
- bool op = ;
- while(c = getchar(), c < '' || c > '')
- if(c == '-') op = ;
- x = c - '';
- while(c = getchar(), c >= '' && c <= '')
- x = x * + c - '';
- if(op) x = -x;
- }
- template <class T>
- void write(T x){
- if(x < ) putchar('-'), x = -x;
- if(x >= ) write(x / );
- putchar('' + x % );
- }
- const int N = , INF = 0x3f3f3f3f;
- int n, m, lastans;
- int ecnt, nxt[*N], go[*N], adj[N], edir[*N], emi[*N];
- int sze[N], bel[N], dep[N];
- int anc[N][], mi[N][], dir[N][];
- void out(){
- for(int i = ; i <= n; i++)
- for(int j = ; anc[i][j]; j++)
- printf("anc[%d][%d] = %d, dir = %d, mi = %d\n", i, j, anc[i][j], dir[i][j], mi[i][j]);
- }
- void adde(int u, int v, int d, int w){
- go[++ecnt] = v;
- nxt[ecnt] = adj[u];
- adj[u] = ecnt;
- edir[ecnt] = d;
- emi[ecnt] = w;
- }
- void dfs(int u, int pre, int rt){
- bel[u] = rt;
- dep[u] = dep[pre] + ;
- for(int i = ; i < ; i++){
- anc[u][i + ] = anc[anc[u][i]][i];
- mi[u][i + ] = min(mi[u][i], mi[anc[u][i]][i]);
- dir[u][i + ] = dir[u][i] | dir[anc[u][i]][i];
- }
- for(int e = adj[u], v; e; e = nxt[e])
- if((v = go[e]) != pre){
- anc[v][] = u;
- mi[v][] = emi[e];
- dir[v][] = edir[e] ^ ;
- dfs(v, u, rt);
- }
- }
- void add(int u, int v, int w){
- adde(u, v, , w);
- adde(v, u, , w);
- int d = sze[bel[u]] > sze[bel[v]] ? : ;
- if(d == ) swap(u, v);
- anc[u][] = v, mi[u][] = w, dir[u][] = d;
- sze[bel[v]] += sze[bel[u]];
- dfs(u, v, bel[v]);
- }
- int query(int u, int v){
- if(bel[u] != bel[v]) return ;
- int d = , ret = INF;
- if(dep[u] > dep[v])
- swap(u, v), d = ;
- for(int i = ; i >= ; i--)
- if(dep[v] - ( << i) >= dep[u]){
- if(dir[v][i] != ( ^ d)) return ;
- ret = min(ret, mi[v][i]);
- v = anc[v][i];
- }
- if(u == v) return ret;
- for(int i = ; i >= ; i--)
- if(anc[u][i] != anc[v][i]){
- if(dir[v][i] != ( ^ d) || dir[u][i] != ( ^ d)) return ;
- ret = min(ret, min(mi[v][i], mi[u][i]));
- u = anc[u][i];
- v = anc[v][i];
- }
- if(dir[v][] != ( ^ d) || dir[u][] != ( ^ d)) return ;
- ret = min(ret, min(mi[v][], mi[u][]));
- return ret;
- }
- int main(){
- freopen("money.in", "r", stdin);
- freopen("money.out", "w", stdout);
- read(n), read(m);
- for(int i = ; i <= n; i++)
- bel[i] = i, sze[i] = ;
- int op, a, b, c;
- while(m--){
- read(op), read(a), read(b);
- a = (a + lastans) % n + ;
- b = (b + lastans) % n + ;
- if(op == ) read(c), c = (c + lastans) % n + , add(a, b, c);
- else write(lastans = query(a, b)), enter;
- }
- return ;
- }
2018.09.09 DL24 Day2总结的更多相关文章
- Trusted Block Chain Summit(2018.10.09)
时间:2018.10.09地点:北京金隅喜来登大酒店
- c#用正则表达式判断字符串是否全是数字、小数点、正负号组成 Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");
Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][ ...
- 2018.09.08 DL24 Day1 总结
补一下之前的总结…… T1.restaurant 这道题还是很简单的嘛,子恒dalao非常良心.我们把招牌菜和所需要的菜品绑定在一起就成了完全背包,然后直接跑一遍完全背包即可. #include< ...
- 1.用代码演示String类中的以下方法的用法 (2018.08.09作业)
public class Test_001 { public static void main(String[] args) { String a = "德玛西亚!"; Strin ...
- 【2018.05.09 Python学习及实践】个人项目中使用的Python库备忘-持续更新
科研中无论是使用C/C++.Python.Matlab,如果能找到合适的库可谓是事半功倍: 有时候忙活半天才发现本身就有成熟的库可用,自己实现的在功能.性能.安全性上都远远不及,虽然锻炼了能力,但存在 ...
- 2018.11.09 洛谷P1110 [ZJOI2007]报表统计(multiset)
传送门 sb题. 直接用两个multisetmultisetmultiset维护相邻两个数的差值和所有数的前驱后继. 插入一个数的时候更新一下就行了. 代码: #include<bits/std ...
- 2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)
传送门 先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护. 注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset. 代码: #include&l ...
- 2018.11.09 bzoj4773: 负环(倍增+floyd)
传送门 跟上一道题差不多. 考虑如果环上点的个数跟最短路长度有单调性那么可以直接上倍增+floyd. 然而并没有什么单调性. 于是我们最开始给每个点初始化一个长度为0的自环,于是就有单调性了. 代码: ...
- 2018.11.09 bzoj2165: 大楼(倍增+floyd)
传送门 先倍增出iii使得2i2^i2i时间时刚好有每个点能够到mmm层及以上. 然后就可以用floyd+floyd+floyd+倍增求出刚好不超过mmm层的时间,最后再补一层就行了. 代码: #pr ...
随机推荐
- MySQL-----查
数据库在我眼中就是增删改查,而查,我觉得是数据库最费劲的,数据库的花式查,各种查.下面咱们不废话,就是干. 查: **查数据库版本** select version(); **查登录用户** sele ...
- Ubuntu中Python3虚拟环境的搭建
1.环境准备 首先请自行安装好Python3和pip3(一般Ubuntu是自带Python3的,可以通过sudo apt-get install python3-pip命令来安装pip3) 安装完成后 ...
- uva 1592 Database (STL)
题意: 给出n行m列共n*m个字符串,问有没有在不同行r1,r2,有不同列c1,c2相同.即(r1,c1) = (r2,c1);(r1,c2) = (r2,c2); 如 2 3 123,456,789 ...
- STM32F407 正点原子 资料网址记录
网络资源 资源下载: http://www.openedv.com/thread-13912-1-1.html (注意下载资料的版本!非常推荐腾讯视频,因为可以在线免费倍速播放.课件ppt可以单独下载 ...
- jQuery_计算器实例
知识点: fadeIn()---计算器界面载入淡入效果 hover()---鼠标移入移出某个元素时触发的事件 click()---鼠标单击事件 css()---对元素样式的操作 val()---获取表 ...
- 怎样签发SSL证书
最近在做怎样让网站有SSL,搞了一天,现在总结一下 首先要安装OPENSSL和 Java的 keytool 先用OPENSSL生成私钥和CSR openssl req -newkey rsa:2048 ...
- T1003 电话连线 codevs
http://codevs.cn/problem/1003/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个国家有n个城市 ...
- JVM(三):深入分析Java字节码-上
JVM(三):深入分析Java字节码-上 字节码文章分为上下两篇,上篇也就是本文主要讲述class文件存在的意义,以及其带来的益处.并分析其内在构成之一 ---字节码,而下篇则从指令集方面着手,讲解指 ...
- operamasks—omMessageBox的使用
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs&q ...
- react 服务器端渲染 ssr 中 localstorage/history/window is not defined 解决方案
1.原因 ssr 会在后端执行组件的 componentWillMount 以及在它这个生命周期之前的生命周期 也就是说 ssr 阶段是不会执行 componentDidMount 方法的 当你在 c ...