sums

Python3高级基础(1)

匿名 (未验证) 提交于 2019-12-02 22:51:30
[TOC] Introducing Python Object Types Built-in objects make programs easy to write Built-in objects are components of extensions Built-in objects are often more efficient than custom data structures Built-in objects are a standard part of the language 123 + 222 #整数的加法 345 1.5 * 4 #浮点型的乘法 6.0 2 ** 100 # 2的100次幂 1267650600228229401496703205376 len ( str ( 2 ** 100 )) 31 3.1415 * 2 6.283 import math # 导入数学模块 print ( '$\pi$的数值是:{}' . format ( math . pi )) print ( '85的开方是:{}' . format ( math . sqrt ( 85 ))) $\pi$ 的数值是: 3.141592653589793 85 的开方是: 9.219544457292887 import random random . random () 0

P1966 【NOIP2013】 火柴排队

一曲冷凌霜 提交于 2019-12-02 10:49:26
\(Description\) 题面 有两列火柴,每个火柴有一个高度,定义两列火柴之间的距离为 \(\sum\limits_{i=1}^n (a_i-b_i)^2\) ,其中 \(a_i\) 表示第一列火柴中第 \(i\) 个火柴的高度, \(b_i\) 表示第二列火柴中第 \(i\) 个火柴的高度 可以交换一列中任意两根相邻火柴的位置,使得最终两列火柴距离最小,求最少交换次数 \(Solution\) 想让两列火柴距离最小,显然要使第一列中第 \(i\) 高的火柴对应第二列中第 \(i\) 高的火柴,证明略。 分别开两个数组 \(c,d\) , \(c[i]\) 表示在 \(a\) 数组中第 \(i\) 大的数所在的位置(如果出现相同的数按照下标排序) 比如下面这个例子,理解一下 c 1 4 5 2 3 a 1 3 5 1 2 \(d[i]\) 同理表示 \(b\) 数组 这实际是一种离散化,不过我们常用的离散化 \(c[i]\) 表示 \(i\) 的排名,这个离散化 \(c[i]\) 表示排名为 \(i\) 所在的下标 然后令 \(p[c[i]]=d[i]\) ,表示他们之间的对应关系 比如下面这样 c 1 4 5 2 3 d 3 2 1 5 4 p 3 5 4 2 1 最终要求在各自数组中排名相同的在同一位置,即 \(p[i]=i\) 所以要把 \(p\)

DP | Luogu P1466 集合 Subset Sums

半世苍凉 提交于 2019-11-30 13:13:08
题面: P1466 集合 Subset Sums 题解: dp sum=N*(N+1)/2; 模型转化为求选若干个数,填满sum/2的空间的方案数,就是背包啦 显然如果sum%2!=0是没有答案的,就特判掉 F[i][j]表示对于前i个数,和为j的方案数 F[0][0]=1; F[i][j]+=F[i-1][j-i] (j>=i) 转化为 for(int i=1;i<=N;i++) for(int j=sum/2;j>=i;j--) F[j]+=F[j-i]; 答案是F[sum/2]/2,因为真实题目要求是划分嘛,然后你写成选出了你又把它放A又放B当然得/2了。。 反正就是这样 代码: 1 #include<cstdio> 2 #define ll long long 3 using namespace std; 4 const int maxn=45,maxsum=maxn*(1+maxn)/2; 5 int N,sum,hf; 6 ll F[maxsum/2]; 7 int main(){ 8 scanf("%d",&N); 9 sum=N*(N+1)/2; 10 if(sum%2){ 11 printf("0\n"); 12 return 0; 13 } 14 hf=sum/2; 15 F[0]=1; 16 for(int i=1;i<=N;i++) 17 for(int j