51nod1112(xjb)】的更多相关文章

題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1112 題意:中文題誒- 思路:對於函數 f(x) = a + kx,對於x足夠大的情況下,顯然f(x)的值的相對大小是只受 k 影響的.對於 n 條這樣的直線最多可以發生 (n-1)*n/2 次超越: 不過本題只要求輸出前 1e4 次超越,所以可以先二分出1e4次超越的時間點(這部分是用來優化常數的),然後再枚舉每一次超越即可.這樣的時間復雜 度爲 O(n^2…
鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR之间的叫S,FB之间的叫M 这样子棱就可以定义为UF啊UR啊之类的[咦?UR? 角就是用三个面定义:UFR.URB.DBR[按照逆时针来写三个面 然后就是各种旋转,对于一个面有三种旋转方式(以U为例):U,U',U2分别表示上面顺时针旋转90°,逆时针旋转90°,旋转180° 所以各种公式就是一串U…
题目链接:hdu_5881_Tea 题意: 有一壶水, 体积在 L 和 R 之间, 有两个杯子, 你要把水倒到两个杯子里面, 使得杯子水体积几乎相同(体积的差值小于等于1), 并且使得壶里剩下水体积不大于1. 你无法测量壶里剩下水的体积, 问最小需要倒水的次数. 题解: 我是xjb猜的,下面附上ICPCcamp的题解 考虑倒水的大致过程,L = 0 和 L = 1 的情况应该是等价的,所以不妨设 L >0.首先向一个杯子倒 L/2升水,再往另一个杯子倒 L/2+1升水.接下来就来回往两个杯子里倒…
题目链接:hdu_5873_Football Games 题意: 有n个队,每个队都会给其他队打一场,赢一场得2分,平局得一分,输了不得分,然后给你全部比赛结束后的得分,问你是否有假分 题解: 可以知道每打一场分数总和会加2,然后奇数得分的个数是偶数个,0得分的个数最多一个,因为不可能两个队全部都是输,然后就这样xjb水过去了 #include<bits/stdc++.h> #define F(i,a,b) for(int i=a;i<=b;++i) using namespace st…
题目链接:hdu_5761_Rower Bo 题意: 让你求一个物理问题 题解: xjb猜公式,由题目样例可得,答案为8/7,然后我们可以xjb猜出公式为v1*a/(v1*v1-v2*v2),然后特判一下a=0和v1<=v2的情况就OK #include<bits/stdc++.h> int main(){ int a,v1,v2; while(~scanf("%d%d%d",&a,&v1,&v2)) { )puts("); else…
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1276 题意:中文题诶- 思路:xjb 通过画图可以发现对于当前水没过的点,若其为极小值点,则岛屿数目-1,若为极大值点则岛屿数目+1: 可以给海面高度排序,海面高度单调时岛屿的状态也是连续的. 可以给山峰高度排序,避免对于每一个高度海面都遍历一遍才能找到被淹没的山峰. 代码: #include <iostream> #include <stdio.h&…
话说泥萌北大信科啊,助教是有多懒...去年黑白棋今年同化棋,顺带打ai都不用自己写标程... 好吧..我知道泥萌重点在各种sb的辅助操作上..什么悲剧的可以随时暂停载入...有毒吧 [据说泥萌上课没讲DP考试要考?啊哈哈哈哈哈笑哭了 好进入正题...同化棋(英文ATAXX)是一种奇怪的智障类翻转棋...具体详见..百度百科? 然后做法的话...一般都是参见黄学长的... 结果人家写的是黑白棋23333 不过Minimax算法和AlphaBeta剪枝还是要学一下的 有这篇论文讲解得很清楚..比百度…
题意:n个数每次选三个数删除,取其中两个数将gcd放回去两次,问最后剩的数可能是多少 分析:考虑最优情况: 先拿出三个数,留下两个x,x  再来一个y,(x,x,y)我们可以删去一个x,留下两个gcd(x,y),这两个gcd(x,y)等价于刚才的两个x,x 也就是每次操作我们都可以有一个额外的数让我们删去,并不断扩充gcd 于是答案就是所有子集的gcd 但第一次我们必定删去一个数,它没法加入gcd操作中,所有n个子集的gcd不能作为最终结果 即答案就是2<=size<n的子集的gcd 可以先跑…
题目链接:hdu_5927_Auxiliary Set 题意: 给一棵n个节点的树,最开始全部都是重点,现在有q个询问,每次给你一些轻点,并叫你输出整棵树的重点数量, 轻点可能会变为重点,如果这个轻点是两个重点的lca. 题解: 这里 我把有重点的子树叫重子树,一个重点都没有的子树叫轻子树. 一个轻点如果有两个重子树,那么这个轻点就会变为重点,可以画图试试. 然后我们就将轻点从树的最底层开始更新 x为这个点的子树个数,n为这个点的轻子树个数, 如果x-n=0,那么这个点的父亲节点的n就++ 如果…
题目链接:hdu_5813_Elegant Construction 题意: 给你n个点,每个点要可以到达ai个点,可以直接可以间接,不能有环,问是否可行,如果可行就任选一种方式连接,并输出连接的边数和边 题解: 我们按每个点要能到达的点数从小到大排序,然后枚举每个点i,对前面的j(j<i)连一条边,这样保证能到达ai个点,如果第i个点大于等于i,那么肯定没有方案,此时不能向后面的点连边,如果连了就成环了. #include<bits/stdc++.h> using namespace…
题目链接:hdu_5805_NanoApe Loves Sequence 题意: 给你n个数,现在要删一个数,删每个数的概率是一样的,现在问你删一个值后的相邻数绝对值最大差的期望是多少,因为担心精度误差,让你答案乘n 题解: 先算出不删数的绝对值最大的差ma并记录位置,如果要删的数不是刚才求出来的位置,那么ans+=max(abs(a[i-1]-a[i+1],ma).如果是,那么重新求一下最大值就行了,因为最多重求两次,所以总复杂度还是O(n). #include<cstdio> #inclu…
题目链接:hdu_5752_Sqrt Bo 题意: 给你一个数,问你最少要开多少次方才能为1 题解: 我们发现如果给的数大于232 那么肯定在5次以内是开不出来的,所以直接输出TAT,然后小于的就模拟一下,注意1和0的特判就行 #include <cstdio> #include <cstring> #include <cmath> typedef long long ll; << ) - ; ] ="; ]; int len; void fail…
https://www.patest.cn/contests/gplt/L2-007 题解:一开始是想直接并查集,一个家就是一个集合,对每个集合维护一个人数num1一个房产数num2 一个房产面积area 以及一个最小编号. 后来想了一下,直接建树,然后对每棵树搜一遍算了,给的信息太多了...但是每个人会有两个父亲节点,我们一个都不管,只是存在数组里,在找这颗树的最小id时会用到. 再想了一下,直接建图呗.然后写了半小时..太复杂了吧 坑:1.set的erase的参数不是int,是iterat…
zcy真是垃圾,啥都不会的那种. 菜的不行. 这场手速上了三题,然后各种E被卡…… 日个吗居然E不开栈,傻逼吧 有毒吧 来看题: A.sqc给的我的神奇公式,gtmd居然能A? #include<bits/stdc++.h> using namespace std; ; int main(){ scanf("%d",&n); ;i<n-;i++){ ,k=(n-i)-(n-i)/; ans=max(ans,sin(i)+sin(j)+sin(k)); } pr…
Function 时限:5s 空限:256M (都是单点) Discription 现在你有一个函数: inline int f(int x){ int tot=0,alr=0,now; while(alr<x){ now=rand()%x+1; tot++; if(!v[now]) alr++,v[now]=1; } return tot; } 其中v可以被看成是一个无限大的每一个位置初始值都为0的数组. 对于一个给定的n,大(shen)葱想知道 f(n) 的期望是多少. 但是这个问题太简单了…
题目链接:http://codeforces.com/problemset/problem/837/F 题意:给出一个大小为 n 的数组 a 和一个数 k,每次操作后的到一个 a' 数组,a'i 为 a 数组中 ai 的前缀和.问最少需要几次操作能使得数组中最大的元素不小于 k. 思路:可以分类讨论一下,对于 n = 2 的情况直接可以计算出结果,对于 n = 3 的情况可以二分答案,对于 n >= 4 的情况直接暴力就好了. 代码: #include <iostream> #inclu…
题目链接:http://codeforces.com/problemset/problem/837/E 题意:f(a, 0) = 0 ,     f(a, b) = 1 + f(a, b - gcd(a, b))     给出 a, b,求 f(a, b). 思路:对于当前 a, b,若 gcd(a, b) = c,那么 b = k * c, b 每次减少 c 直到 gcd(a, b) != c, 即 k 每次减小 1, 直至 k 与 a 存在其他因子 d, 即:gcd(a', b') = d,…
题目链接: http://codeforces.com/problemset/problem/788/B 题意: 给出一个有 n 个顶点和 m 条边的图(没有重边,可能有自环), 可以从中任意一个顶点开始(一笔画), 要求经过其中 m  - 2 条边 2 次, 2 条边一次, 求共有多少种满足要求的方案. 思路: 首先要是给出的图是非边联通的话, 答案肯定为 0. 对于边联通的图, 我们可以枚举两条经过一次的边中的一条, 再分析另一条边. 对于第 i 条边, 若其为非自环边, 那么可以与其组合的…
题目链接: http://codeforces.com/problemset/problem/799/C 题意: 有c, d两种货币, 有 n 个货物, 可以用 c 货币或者 d 货币购买, 现在需要买两件货物, 问购买的货物的美丽值最大可为多少. 思路: 只买两件货物, 那么总共有 3 总可能, 买一件 c 一件 d, 买两件 c 或者买两件 d . 取他们的最大值即可. 可以给 c 货物和 d 货物按 p 升序排列, 那么对于买一件 c 一件 d 的情况, 只需要遍历一下 c 货物 和 d…
题目链接:https://nanti.jisuanke.com/t/15772 题意:中文题诶- 思路:对于坐标为p1(x1, y1), p2(x2, y2) 的两个核心, 其中 x1 <= x2 用 d(p1, p2) 表示两者间最矮的大楼,则需要时间为: 对于d(p1, p2) >= min(y1, y2)情况,cnt = abs(x2 - x1) + abs(y2 - y1) 对于d(p1, p2) < min(y1, y2)情况,cnt = y1 + y2 - 2*d(p1, p…
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T126 题意:中文题诶- 思路:显然被翻转了奇数次的硬币为反面朝上,但是本题的数据量很大,所以O(n^2)枚举每个点肯定是不行的... 可以反过来想一下,对于一个坐标 (i, j),显然其只被坐标 (x, y) 影响当且仅当 x 是 i 的因子或者 y 是 j 的因子: 用 f(x) 表示 x 的因子数目,那么坐标 (i, j) 反面朝上的充要条件为 f(i)*f(j) 为奇数,即 f(i) 为奇数并且 f…
题目链接:http://codeforces.com/problemset/problem/808/D 题意:问能不能通过交换不超过两个元素的位置使得原数组变成能分成前,后和相等的连续两部分: 注意这里只能交换一次!!! 思路:若存在某段前缀和 sum1[i] + x = ans/2 其中 x 为[ 0, i ] 外的某个元素 或者后缀和 sum2[i] + x = ans/2 其中 x 为 [ i, n-1 ] 外的某个元素: 则为 "YES" ,否则为 "NO"…
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1110 题意:中文题诶- 思路:可以将在 xi 位置,权值为 wi 的点看作有 wi 个点在 xi 位置.然后再按位置排一下序,再找中位数即可: 代码: #include <iostream> #include <stdio.h> #include <algorithm> #define ll long long using names…
題目鏈接:http://www.51nod.com/contest/problem.html#!problemId=1804 題意:中文題誒~ 思路: 三角形個數爲n-1, a, b數組元素個數也爲n-1, 爲了後面敘述方便先令n=n-1: a數組元素用了一次,b數組元素用了兩次,所以sum=3*(n+1)*n/2, 要將其分配到 n 個三角形中, 即sum%n==0, 顯然只有n爲奇數時可行: 令 n=2*k+1, 則每個三角形的變權和爲 ans=sum/n=3*k+3: 接下來只要構造一個兩…
題目鏈接:https://nanti.jisuanke.com/t/366 題意:中文題誒~ 思路: 先通過給出的條件構造一個符合題意的數組(可以是任意一個符合條件的數組,菜雞不會證明: 然後構造的數組和初始序列1, 2, 3, 4...n最少不同元素的個數就是答案: 這點是比較好理解的:題目中給出的b1, b2, ...bm可以是不連續的, 那麼如果每次選擇的m個與初始序列不同位置的元素並且通過一次操作後可以到達初始序列所在位置: 那麼所需代價肯定是最小的,總代價即爲位置不同的元素的數目. 所…
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 题意:中文题诶- 思路:随便写几个例子不难发现乘机中间部分会出现循环,只需考虑3个a的情况即可... 代码: #include <iostream> using namespace std; int main(void){ int t, a, b, d, n; cin >> t; while(t--){ cin >> a >…
题目链接:http://codeforces.com/contest/797 A题 题意:给出两个数n, k,问能不能将n分解成k个因子相乘的形式,不能输出-1,能则输出其因子: 思路:将n质因分解,若质因子数目对于k则可行,随便将其组合成k个因子即可,反之则不行: 代码: #include <bits/stdc++.h> using namespace std; const int MAXN=1e5; int a[MAXN]; int main(void){ ; cin >> n…
题目链接:http://codeforces.com/problemset/problem/768/C 题意:给出一个数组,经过k次操作后最大元素和最小元素分别是什么.. 操作:给当前数组排序,再将第奇数个元素异或 x: 思路:由于异或运算的性质,经过落干次操作后会形成稳定的数组: 代码: #include <iostream> #include <algorithm> #include <string.h> using namespace std; const int…
一.前言部分 最近在面试,重新温习了一遍多线程,希望加深一遍对于多线程的理解. 1.什么是进程? 1).要了解线程我们必须先了解进程,通俗来讲进程就是在系统中运行的一个应用程序. 2).每个线程之间是独立存在的,分别运行在其专用的且受保护的内存空间中. 3).比如打开QQ或Xcode系统会分别开启两个进程 如图:…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB1QAAAMcCAIAAABo0QCJAAAgAElEQVR4nOydW7msuhKF2wIasIAHJK…