[Python] 关于输入输出的设置

print(*value, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
以上是缺省情况下print的设置
*value就是要输出的值用逗号分隔,类似于C语言的printf
“a=%d b=%d” % (a,b) 用a来替换%d的值,当然还支持%c,%s,%u,%o,%x,%f
sep就是每个value之间所用的间隔符,默认是空格,当然可以改为””即不空
end表示的是print最后的输出,默认是换行,可以改为空
file就是输出的重定向后的文件的位置比如f=open(“c.in”,”w”) file=f即可
flush因为输出的是后字符是存储在内存里的,flush=true即可以立刻输出到文件

 

a,b=map(int,input().split())
可以一次input得到多个数,input默认是str类型的所以转为int

[C++] 关于不同分布的随机数的生成

源于SJ加分题的发红包,想到如何生成制定分布的随机数。

当时就想到红包的值应该是以红包的平均值为峰值的正态的分布。(后来想想应该是偏态分布)这个分布的平均值是红包的平均值。实际上,那个函数的具体实现方法应该是也不是这么简单,我还没找到合适的方法。

前几天看机器学习的时候看到一个Gamma分布(看这个图形的样子的好像是偏态分布。就去学习了一番。

平均分布

过于简单,不再赘述

正态分布

最广为流传的方式应该就是Box-Muller的变换了。U_1, U_2是随机分布的[0~1]内的随机数

    \[U_1=Rand()\quad U_2=Rand()\]

    \[Z=R*\cos(\theta)\]

    \[R=\sqrt{-2*\ln(U_2)}\]

    \[\theta=2*\pi*U_1\]

这样的Z就是符合正态分布的随机数了。

Gamma分布

发现网上也没什么资料,不过C++11提供了很多现成的库来生成不同分布的随机数。这是C++PLUSPLUS的URL

有Gamma分布,Binomial分布,还有指数分布,大概有十多个。

// gamma_distribution
#include <iostream>
#include <random>

int main()
{
  const int nrolls=10000;  // number of experiments
  const int nstars=100;    // maximum number of stars to distribute

  std::default_random_engine generator;
  std::gamma_distribution<double> distribution(2.0,2.0);

  int p[10]={};

  for (int i=0; i<nrolls; ++i) {
    double number = distribution(generator);
    if (number<10) ++p[int(number)];
  }

  std::cout << "gamma_distribution (2.0,2.0):" << std::endl;

  for (int i=0; i<10; ++i) {
    std::cout << i << "-" << (i+1) << ": ";
    std::cout << std::string(p[i]*nstars/nrolls,'*') << std::endl;
  }

  return 0;
}

Possible output:

gamma_distribution (2.0,2.0):
0-1: *********
1-2: *****************
2-3: ******************
3-4: **************
4-5: ************
5-6: *********
6-7: *****
7-8: ****
8-9: ***
9-10: **

UPDATE(2019/7/31):
在知乎上看到的TESTU01,可以用来检验随机数生成的随机性(Random Number Generator, RNG),有官方文档用来证明验证的方式和验证函数的使用。

[SSR]使用Vultr来进行SSR的设置

高数考完了不知道干些什么,

先给出相关的网址:

 锐速破解版 用于加速

更换CentOS内核,以适应锐速支持的版本

购买Vultr

我购买的是洛杉矶的,日本的,硅谷的,最后试下来还是洛杉矶的好一点,日本的连SSH都连接不上去。在SecureCRT登陆即可。

安装ShadowSocks

下载

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh

更改ShadowSocks权限

chmod +x shadowsocks.sh

安装ShadowSocks

./shadowsocks.sh 2>&1 | tee shadowsocks.log

密码,端口号自己设定,Iphone 只支持cfb,因此最后一项选择aes-256-cfb, 即7

更换CentOS的内核,之后安装锐速。

使用SSTAP来在主机进行使用

感觉SSTAP的作者非常厉害啊,高中辍学回家,自学编程就搞出来个这样的软件,没想到因为硬盘损坏导致源码丢失,SSTAP无法继续维护了,叹叹。

[C++]杂碎知识

关于Sizeof

sizeof(Gen()),Gen()是一个函数,Gen不会运行。

#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;

int Gen()
{
  cout << "!!!!" << endl;
  return 0;
}
int main()
{
  cout << sizeof(Gen()) << endl;
  return 0;
}

输出的是Gen()的返回值int的sizeof
据说是sizeof的值在编译的时候就已经处理完毕了

Putchar的返回值

putchar的返回值即是它要输出的值

Perror,Strerror 错误捕捉后的输出字符串

!!Num=1 将数字转换成0,1

atof,atoi 字符串转浮点或整形

memcpy在内存重合的时候可能会出错,用memmove会好一点

 

#include <typeinfo>
typeid(t).name() 得到t的类型名称

Chocolatey Windows包管理系统..但是听说只有一个源,速度很慢。

C中使用Restrict 来解决 Pointer aliasing 的问题