zoj 1730 / poj 1455 Crazy Tea Party】的更多相关文章

这阵子都没怎么写代码,由于开学,忙于各种琐碎的事情,现在静下来了开始跟着暑假的节奏刷题了. 这道题一开是没看清题目-在寝室刷题就是效率不高... 后来才知道,题目意思是,一个环形序列,1minute可以交换相邻的两个位置,问逆序所需的最小时间是多少. 如果不是环形的话那就好办了,就是个冒泡. 非环形时: 如 n = 5 : 1 2 3 4 5 所需时间为:n*(n-1)/2 = 10 环形时: 如 n = 5 :1 2 3 4 5 可将 n拆分成2 + 3 1 2 和 3 4 5 可用4部将其逆…
这道题第一眼看去很难,其实不然,短短几行代码就搞定了. 说一下大概思路,如果是排成一排的n个人,如 1 2 3 4 5 6 7 8 我们要变成 8 7 6 5 4 3 2 1 需要交换 28次,找规律的话就是 n*(n-1)/2,但这道题是一个圈,要让他们顺序变反的话不一定1要在8的位置上去,4 3 2 1 8 7 6 5 这样也是反的,我们只要把n个人分成两部分,然后按拍成一条线的方法来出来两部分就OK了: #include <iostream> #include <stdio.h&g…
题目连接:problemId=542" target="_blank">ZOJ 1542 POJ 1861 Network 网络 Network Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Andrew is working as system administrator and is planning to establish a new network in his com…
#include<cstdio> int main(){ int T,n; scanf("%d",&T); while(T--){ scanf("%d",&n); printf(*(n/-)/+(n-n/)*(n-n/-)/); } ; }…
水题三题: 1.给你B和N,求个整数A使得A^n最接近B 2. 输出第N个能被3或者5整除的数 3.给你整数n和k,让你求组合数c(n,k) 1.poj 3100 (zoj 2818) Root of the Problem: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2818 http://poj.org/problem?id=3100 #include<cstdio> #include<cmath>…
题目链接:http://poj.org/problem?id=1200 思路分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的:使用hash可以在常数时间内查找,可以常数时间内判重, 可以再线性时间内解决问题:问题关键在与Hash函数的选择,使得子串之间的Hash值不同:由于NC的提示,使用NC作为基数,其他字符 分配不同的数码,从1-NC,再求取Hash值,保证函数为单一映射: 代码如下: #include <stdio.h> #include <string.h>…
最小生成树,用了Kruskal算法.POJ上C++能过,G++不能过... 算出每两个圆心之间的距离,如果距离小于两半径之和,那么这两个圆心之间的距离直接等于0,否则等于距离-R[i]-R[j]. #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; ; struct abc{ int start, end; double…
题链: http://poj.org/problem?id=3378 题解: 树状数组维护,高精度. 依次考虑以每个位置结尾可以造成的贡献. 假设当前位置为i,为了达到5个元素的要求,我们需要求出,在序列1-i-1中有多少个合法4元组$(a<b<c<d且A_a<A_b<A_c<A_d)$的最后那个元素是小于$A_i$的$(即为了满足a<b<c<d<i且A_a<A_b<A_c<A_d<A_i)$,求出这种四元组的个数,那么就…
题目:http://poj.org/problem?id=1200 最近看了一个关于hash的问题,不是很明白,于是乎就找了些关于这方面的题目,这道题是一道简单的hash 字符串题目,就先从他入手吧. 题目说字串的最大数量不超过16Millions,也就是字串的存储16000000就够了. 查看网上给出的hash映射是把字串映射成为一个NC进制的数字每个字串都是一个数字. #include <stdio.h> #include <iostream> using namespace…
http://poj.org/problem?id=1200 #include<iostream> #include<cstring> using namespace std; const int maxn=2e7; ],ans=; ]; char s[maxn]; int main(){ memset(vis,,); scanf("%d%d%s",&len,&base,s); int base1=base; //把字符串转换为base进制的数…
[题目链接] http://poj.org/problem?id=3378 [题目大意] 给出一个序列,求序列中长度等于5的LIS数量. [题解] 我们发现对于每个数长度为k的LIS有dp[k][i][a[i]]=dp[k-1][i-1][0~a[i]-1] 我们用5个树状数组维护不同长度的LIS,递推即可,注意答案超过LL,需要用大数. [代码] #include <cstdio> #include <algorithm> #include <cstring> usi…
Link: POJ 3378 传送门 Solution: 按序列长度$dp$, 设$dp[i][j]$为到第$i$个数,符合要求的序列长度为$j$时的序列个数, 易得转移方程:$dp[i][j]=\sum_{k=1}^{i-1} dp[k][j-1] (dat[k]<dat[i])$ 用树状数组按$dat[i]$为坐标来维护$dp[i][j-1]$的值即可, 由于$dat[i] \le 1e9$,记得离散化,同时答案超过$long long$,要高精度 这里可以选择开5个树状数组,也可以只用一个…
poj : http://poj.org/problem?id=1523 如果无向图中一个点 u 为割点 则u 或者是具有两个及以上子女的深度优先生成树的根,或者虽然不是一个根,但是它有一个子女 w, 使得low[w] >= dfn[u]; 其中low[u] 是指点 u 通过回边所能达到的 最小深度优先数,dfn[u]是指 点u 当前所处的 深度优先数: low[u] 是在递归回退时计算出来的,dfn[u] 是在递归时直接计算的. low[u] = min { dfn[u]; min{  low…
Description "Hike on a Graph" is a game that is played on a board on which an undirected graph is drawn. The graph is complete and has all loops, i.e. for any two locations there is exactly one arrow between them. The arrows are coloured. There…
/* 冒泡排序n*(n-1)/2; */ #include <iostream> using namespace std; int main() { //freopen("acm.acm","r",stdin); int test; int n; cin>>test; while(test --) { cin>>n; == ) { cout<<(n/-)*(n/)<<endl; } else { cout&…
题目描述:考虑图8.9中的两个网络,假定网络中的数据只在有线路直接连接的2个结点之间以点对点的方式传输.一个结点出现故障,比如图(a)所示的网络中结点3出现故障,将会阻止其他某些结点之间的通信.结点1和结点2仍然是连通的,结点4和结点5也是连通的,但这2对结点之间 的通信无法进行了.因此结点3是这个网络的一个SPF结点.严格的定义:对于一个连通的网络,如果一个结点出现故障,将会阻止至少一对结点之间的通信,则该结点是SPF结点.注意,图所示的网络不存在SPF结点.至少两个结点出现故障后,才会使得其…
学习了多位大牛的方法,看看到底能把时耗降到多少? A* // zojfulltest: 30000ms # include <stdio.h> # include <ctype.h> # include <stdlib.h> # include <string.h> # define DATA(x,i) (((x)>>((i)*))&0x7) # define ZERO(x) ((x)>>) # define F(x) ((x…
思路:利用Karp-Rabin算法的思想,对每个子串进行Hash,如果Hash值相等则认为这两个子串是相同的(事实上还需要做进一步检查),Karp-Rabin算法的Hash函数有多种形式,但思想都是把字符串映射成一个数字.本题hash函数是把字串转化为NC进制的数(实际上程序中计算结果已经被转换为10进制,因为NC进制数不同转化为10进制数自然不同,所以不影响判断结果),数组开到了1.6×10^7(我试了一下1.2×10^7也能AC),实际上这也是不严谨的,因为我们不能保证hash之后的数值在这…
多重背包模板- #include <stdio.h> #include <string.h> int a[7]; int f[100005]; int v, k; void ZeroOnePack(int cost, int weight) { for (int i = v; i >= cost; i--) if (f[i - cost] + weight > f[i]) f[i] = f[i - cost] + weight; } void CompletePack(…
题目链接 题目大意: 给出n个数, 让你求出有多少个5元组满足 i < j < k < l < m并且ai < aj < ak < al < am 我们令d[i][j]表示以j位置为末尾的长度是i的序列的个数. 比如1234567这7个数. dp[1][1], dp[1][2], dp[1][7]都是1. dp[2][1] = 0, dp[2][2] = 1(1, 2), dp[2][3] = 3( (1,3), (2,3)). 依次类推. 那么显然以j位置…
差分约束系统. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<queue> #include<algorithm> using namespace std; ; map<int, int> jz[maxn]; vector<int>ljb[maxn]; int di…
拓扑排序. 深刻体会:ACM比赛的精髓之处不在于学了某个算法或数据结构,而在于知道这个知识点但不知道这个问题可以用这个知识去解决!一看题目,根本想不到是拓扑排序.T_T...... #include<stdio.h> #include<string.h> #include<math.h> #include<vector> #include<algorithm> using namespace std; ][]; ]; int i, j, k, f…
枚举起点和公司,每次用DFS跑一遍图,预处理出所有的答案.询问的时候很快就能得到答案. #include<cstdio> #include<cmath> #include<cstring> #include<vector> #include<algorithm> using namespace std; ][][]; ][][]; ]; vector<]; int n; int S,T,G; void DFS(int now) { ans[…
最小生成树,主要是题目比较难懂. #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; +; *+; int Father[Maxn]; struct Edge { int from,to,w; }edge[maxn]; int n,tot; ]; int Find(int x) { if(x!=Father[x]) Fa…
<题目链接> 题目大意: 给定n,nc,和一个字符串,该字符串由nc种字符组成,现在要你寻找该字符串中长度为n的子字符串有多少种. 解题分析: 因为要判重,所以讲这些字符串hash一下,将不同的字符串映射为数字,这里我们是将该字符串转化为nc进制数,不同的字符串分别对应nc进制下不同的数. #include <cstdio> #include <cstring> using namespace std; ; char str[M]; bool hash[M]; ]; i…
题目链接 Description Many people like to solve hard puzzles some of which may lead them to madness. One such puzzle could be finding a hidden prime number in a given text. Such number could be the number of different substrings of a given size that exist…
RK法:https://www.cnblogs.com/16crow/p/6879988.html #include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include<iostream> #include<cstring> #include<set> #include<queue> #include<algorithm&…
Pass-Muraille Time Limit: 2 Seconds      Memory Limit: 65536 KB In modern day magic shows, passing through walls is very popular in which a magician performer passes through several walls in a predesigned stage show. The wall-passer (Pass-Muraille) h…
题意就是说把顺时针排的1到n换成逆时针排的需要的最少交换步数. 如果是线形的一串数,需要的交换次数就是个冒泡排序的交换次数:n*(n-1)/2,或者用a[i]=(i-1)+a[i-1]推出来. 对于环形,切成两个线形就行了,通过观察规律知:越接近平均切开越好. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #incl…
原题 给出数n,求出1......n 一串数,其中每个数字分解的两个加数都在这个序列中(除了1,两个加数可以相同),要求这个序列最短. ++m,dfs得到即可.并且事实上不需要提前打好表,直接输出就可以. #include<cstdio> using namespace std; int dep=0,n; int a[102]; bool dfs(int step) { if(step>dep) return a[dep]==n; for(int i=0;i<step;i++) {…