3.15~3.16

作者分享了最近在Vjudge平台上参与编程竞赛的经历,主要涉及Java学习和解决算法问题。在一道题目中,通过深入理解要求的最优解,学习了如何判断并实现棋盘翻转的最小操作数。另一题则是通过二进制搜索寻找特定模数的数字,发现代码在不同编译器下的行为差异。最后一题,作者使用字符串处理方法解决了一道相对简单的题目。由于被难题困扰,Java学习进度受到影响,计划在接下来的时间里专注于Java学习。
摘要由CSDN通过智能技术生成

这两天主要是写了题组里面的题目和Java的学习,本来打算平均分配时间在刷题和学Java上的,结果因为几个题目一直写不出来,花了很长时间在刷题上面,Java学的很少。

先说一下这两天写的题:

https://vjudge.net/contest/547627#problem/B

这题刚开始的时候我只会判断能不能全部变成白色,方法是第一行不管,直接从第二行开始遍历,如果它的头上是黑色的话就要翻转;一直到最后一行遍历完后看最后一行是不是全是白色,如果不是则不能达到目的;这是判断的方法;

但是这题要求的是最优解,这就让我想了很久,于是我想到了第一行翻与不翻对结果时会有影响的;于是又难倒我了,如何判断第一行的某个元素到底要不要翻呢?,一看数据范围,m,n最多15;这还判断个毛线,直接遍历;由于此时我已经心累,就去csdn上面看了题解;

 要看懂这段代码需要了解一些知识点;首先是1<<m;这个其实表示的是1*2^m;

flip[0][m-j-1]=i>>j&1;这句其实就是将第一行的翻转后的情况全部搞出来了;

第一行的结果已经出来,然后我们根据第一行的状态去判断能不能全白;并且记录翻转的次数;

#include<stdio.h>
int map[20][20];
int temp[20][20];//临时的翻转情况;
int ans[20][20];//最终的结果;
int nextx[5] = { 0, 1, -1, 0, 0 };
int nexty[5] = { 0, 0, 0, 1, -1 };
int m, n;
int get(int x, int y)//得到(x,y)的颜色;
{
	int c = map[x][y];
	for (int i = 0; i < 5; i++)
	{
		int tx = x + nextx[i];
		int ty = y + nexty[i];
		if(tx>=0&&tx<m&&ty>=0&&ty<n)
		{
			c += temp[tx][ty];
		}
	}
	return c % 2;
}
int dfs()
{
	for (int i = 1; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (get(i - 1, j))
			{
				temp[i][j] = 1;
			}
		}
	}
	for (int j = 0; j < n; j++)
	{
		if (get(m-1, j) == 1)
		{
			return -1;
		}
	}
	int cnt = 0;
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cnt += temp[i][j];
		}
	}
	return cnt;
}
int main()
{
	scanf("%d%d", &m, &n);
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			scanf("%d", &map[i][j]);
		}
	}
	int rns = -1, num = 0;
	for (int i = 0; i < 1 << m; i++)
	{
		for (int k = 0; k < 20; k++)
		{
			for (int j = 0; j < 20; j++)
			{
				temp[k][j] = 0;
			}
		}
		for (int j = 0; j < m; j++)
		{
			temp[0][j] = i >> j & 1;
		}
		num = dfs();
		if (num >= 0 && (rns == -1 || num < rns))
		{
			rns = num;
			for (int a = 0; a < m; a++)
			{
				for (int b = 0; b < n; b++)
				{
					ans[a][b] = temp[a][b];
				}
			}
		}
	}
	if (rns == -1)
	{
		printf("IMPOSSIBLE\n");
	}
	else
	{
		for (int i = 0; i < m; i++)
		{
			for (int j = 0; j < n; j++)
			{
				printf("%d%c", ans[i][j], j == n-1 ? '\n' : ' ');
			}
		}
	}
	return 0;
}

https://vjudge.net/contest/547627#problem/C

这题刚开始没想到用搜索的方法去写这道题;而是一直在那找规律;但是花了很长时间都没有找到一个很好的规律;然后我去问了郭浩怡同学;她告诉我要用搜索,而且是将0 1 所能表示的所有值储存在m中,然后再判断m%n是否为0;而且m中储存的数也是有规律的;

1 10 11 100 101 110 111 。。。。。

可以推出a[i] = a[i / 2] * 10 + i % 2;

然后我写完后信心满满的提交却得到答案错误,我又在细节方面改了几个后依然是答案错误;最无语的事情来了,我用一样的代码提交;不过把那语言换了一下;就过了,很是无语;

#include<stdio.h>
long long a[2000000];
int main()
{
	int n;
	while (1)
	{
		scanf("%d", &n);
		a[1] = 1;
		if (n == 0)
		{
			break;
		}
		for (int i = 1 ; ;i++)
		{
			a[i] = a[i / 2] * 10 + i % 2;
			if (a[i] % n == 0)
			{
				printf("%lld\n", a[i]);
				break;
			}
		}
	}
	return 0;
}

https://vjudge.net/contest/547627#problem/D

这题我是一遍过的;我是用了一个字符串来储存A+B的结果;然后再进行操作,如果过程中有一个结果与S相同,就输出结果;如果操作操作着又回到了A+B则说明没有解;不多说了,我感觉是这题组中最简单的一题了;

#include<stdio.h>
#include<string.h>
int t, len;
char s1[105], s2[105], s[205], temps[205], ts[205];
int main()
{
	scanf("%d", &t);
	int T = t;
	while (t--)
	{
		for (int i = 0; i < 105;i++)
		{
			s1[i] = '\0';
			s2[i] = '\0';
		}
		for (int i = 0; i < 205; i++)
		{
			s[i] = '\0';
			temps[i] = '\0';
			ts[i] = '\0';
		}
		scanf("%d", &len);
		scanf("%s", s1);
		scanf("%s", s2);
		scanf("%s", s);
		strcpy(ts, s1);
		strcat(ts, s2);
		int flag = 0;
		int cnt = 0;
		do
		{
			cnt++;
			for (int i = 0; i < 2 * len; i++)
			{
				if (i % 2 == 0)
				{
					temps[i] = s2[i / 2];
				}
				else
				{
					temps[i] = s1[i / 2];
				}
			}
			if (strcmp(temps, s) == 0)
			{
				flag = 1;
				printf("%d %d\n", T - t, cnt);
				break;
			}
			for (int i = 0; i < 2 * len; i++)
			{
				if (i < len)
				{
					s1[i] = temps[i];
				}
				else
				{
					s2[i-len] = temps[i];
				}
			}
		} while (strcmp(ts, temps) != 0);
		if (flag == 0)
		{
			printf("%d -1\n", T - t);
		}
	}
	return 0;
}

写的题还有两个,暂时不总结了;接下来分享一下这两天学的Java;

 

 因为这两天被题目坑了很多次,就跟题目杠上了,没怎么学Java,后面两天,周六我准备花比较长的时间去学习Java;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用MATLAB计算波动率,股票历史价格为3.64 3.61 3.58 3.6 3.59 3.57 3.58 3.6 3.57 3.52 3.49 3.48 3.45 3.43 3.46 3.47 3.49 3.54 3.53 3.5 3.52 3.55 3.42 3.42 3.43 3.44 3.39 3.38 3.41 3.42 3.37 3.44 3.4 3.42 3.41 3.42 3.42 3.39 3.26 3.16 3.18 3.21 3.16 3.24 3.25 3.26 3.26 3.23 3.27 3.32 3.3 3.26 3.25 3.26 3.18 3.22 3.18 3.11 3.14 3.18 3.2 3.13 3.16 3.15 3.14 3.21 3.2 3.21 3.25 3.28 3.25 3.24 3.29 3.28 3.23 3.19 3.17 3.2 3.16 3.16 3.19 3.25 3.25 3.25 3.23 3.3 3.31 3.3 3.33 3.31 3.33 3.27 3.29 3.29 3.31 3.35 3.35 3.33 3.29 3.29 3.3 3.29 3.25 3.22 3.24 3.24 3.23 3.22 3.21 3.28 3.26 3.26 3.26 3.24 3.21 3.25 3.25 3.26 3.27 3.25 3.22 3.18 3.16 3.18 3.19 3.21 3.22 3.25 3.3 3.35 3.35 3.35 3.34 3.3 3.32 3.27 3.24 3.26 3.24 3.28 3.27 3.27 3.29 3.22 3.25 3.26 3.25 3.24 3.19 3.21 3.22 3.2 3.22 3.17 3.12 3.13 3.17 3.17 3.21 3.21 3.19 3.13 3.14 3.11 3.04 3.1 3.1 3.12 3.13 3.12 3.09 3.1 3.12 3.12 3.14 3.13 3.08 3.1 3.04 3.06 3.06 3.11 3.09 3.08 3.05 2.95 2.91 2.89 2.91 2.92 2.83 2.69 2.81 2.86 2.89 2.87 2.88 2.9 2.88 2.84 2.84 2.82 2.9 2.88 2.92 2.91 2.88 2.91 2.83 2.88 2.87 2.91 2.91 2.87 2.84 2.82 2.78 2.8 2.66 2.66 2.71 2.75 2.79 2.78 2.7 2.68 2.7 2.72 2.7 2.73 2.7 2.74 2.73 2.73 2.79 2.76 2.72 2.72 2.72 2.74 2.76 2.79 2.78 2.78 2.81 2.83 2.86 2.85 2.89 2.84 2.87 2.91 2.89 2.93 2.92 2.93 2.9 2.94 2.98 3.02 3.04 3.02 3.07 3.06 3.06 3.06 3.01 3 3.01 2.96 2.94 2.93 2.91 2.87 2.91 2.9 2.91 2.87 2.89 2.88 2.89 2.87 2.87 2.83 2.82 2.77 2.75 2.78 2.82 2.8 2.8 2.77 2.83 2.84 2.82 2.81 2.82 2.8 2.79 2.79 2.77 2.75 2.79 2.79 2.77 2.77 2.8 2.78 2.75 2.74 2.76 2.75 2.75 2.8 2.81 2.79 2.78 2.72 2.72 2.71 2.69 2.67 2.67 2.65 2.68 2.65 2.65 2.65 2.59 2.58 2.59 2.56 2.63 2.62 2.61 2.56 2.54 2.53 2.44 2.43 2.44 2.42 2.37 2.33 2.44 2.46 2.42 2.51 2.52 2.5 2.48 2.48 2.56 2.58 2.63 2.62 2.6 2.59 2.56 2.57 2.58 2.56 2.59 2.54 2.65 2.64 2.63 2.62 2.68 2.69 2.67 2.68 2.71 2.68 2.68 2.7 2.68 2.69 2.65 2.61 2.61 2.63 2.62 2.61 2.64 2.65 2.63 2.65 2.65 2.66 2.71 2.72 2.75 2.74 2.75 2.75 2.8 2.85 2.84 2.82 2.83 2.85 2.85 2.82 2.83 2.82 2.78 2.74 2.75 2.74 2.77 2.76 2.78 2.79 2.76 2.75 2.72 2.8 2.81 2.78 2.77 2.74 2.73 2.75 2.78 2.78 2.78 2.75 2.72 2.7 2.68 2.64 2.67 2.65 2.65 2.63 2.64 2.62 2.65 2.66 2.67 2.66 2.64 2.64 2.64 2.67 2.67 2.67 2.68 2.67 2.69 2.69 2.68 2.67 2.67 2.68 2.74 2.75 2.72 2.71 2.66 2.62 2.62 2.62 2.66 2.68 2.69 2.69 2.72 2.71 2.67 2.67 2.63 2.68 2.67 2.65 2.64 2.63 2.66 2.62 2.58 2.57 2.56 2.55 2.54 2.5 2.51
06-10
我们可以使用MATLAB中的函数计算历史价格的波动率,例如使用“std”函数计算价格的标准差,然后再将其乘以每年的交易天数的平方根来获得年化波动率。 以下是计算代码: ```matlab % 输入历史价格 price = [3.64 3.61 3.58 3.6 3.59 3.57 3.58 3.6 3.57 3.52 3.49 3.48 3.45 3.43 3.46 3.47 3.49 3.54 3.53 3.5 3.52 3.55 3.42 3.42 3.43 3.44 3.39 3.38 3.41 3.42 3.37 3.44 3.4 3.42 3.41 3.42 3.42 3.39 3.26 3.16 3.18 3.21 3.16 3.24 3.25 3.26 3.26 3.23 3.27 3.32 3.3 3.26 3.25 3.26 3.18 3.22 3.18 3.11 3.14 3.18 3.2 3.13 3.16 3.15 3.14 3.21 3.2 3.21 3.25 3.28 3.25 3.24 3.29 3.28 3.23 3.19 3.17 3.2 3.16 3.16 3.19 3.25 3.25 3.25 3.23 3.3 3.31 3.3 3.33 3.31 3.33 3.27 3.29 3.29 3.31 3.35 3.35 3.33 3.29 3.29 3.3 3.29 3.25 3.22 3.24 3.24 3.23 3.22 3.21 3.28 3.26 3.26 3.26 3.24 3.21 3.25 3.25 3.26 3.27 3.25 3.22 3.18 3.16 3.18 3.19 3.21 3.22 3.25 3.3 3.35 3.35 3.35 3.34 3.3 3.32 3.27 3.24 3.26 3.24 3.28 3.27 3.27 3.29 3.22 3.25 3.26 3.25 3.24 3.19 3.21 3.22 3.2 3.22 3.17 3.12 3.13 3.17 3.17 3.21 3.21 3.19 3.13 3.14 3.11 3.04 3.1 3.1 3.12 3.13 3.12 3.09 3.1 3.12 3.12 3.14 3.13 3.08 3.1 3.04 3.06 3.06 3.11 3.09 3.08 3.05 2.95 2.91 2.89 2.91 2.92 2.83 2.69 2.81 2.86 2.89 2.87 2.88 2.9 2.88 2.84 2.84 2.82 2.9 2.88 2.92 2.91 2.88 2.91 2.83 2.88 2.87 2.91 2.91 2.87 2.84 2.82 2.78 2.8 2.66 2.66 2.71 2.75 2.79 2.78 2.7 2.68 2.7 2.72 2.7 2.73 2.7 2.74 2.73 2.73 2.79 2.76 2.72 2.72 2.72 2.74 2.76 2.79 2.78 2.78 2.81 2.83 2.86 2.85 2.89 2.84 2.87 2.91 2.89 2.93 2.92 2.93 2.9 2.94 2.98 3.02 3.04 3.02 3.07 3.06 3.06 3.06 3.01 3 3.01 2.96 2.94 2.93 2.91 2.87 2.91 2.9 2.91 2.87 2.89 2.88 2.89 2.87 2.87 2.83 2.82 2.77 2.75 2.78 2.82 2.8 2.8 2.77 2.83 2.84 2.82 2.81 2.82 2.8 2.79 2.79 2.77 2.75 2.79 2.79 2.77 2.77 2.8 2.78 2.75 2.74 2.76 2.75 2.75 2.8 2.81 2.79 2.78 2.72 2.72 2.71 2.69 2.67 2.67 2.65 2.68 2.65 2.65 2.65 2.59 2.58 2.59 2.56 2.63 2.62 2.61 2.56 2.54 2.53 2.44 2.43 2.44 2.42 2.37 2.33 2.44 2.46 2.42 2.51 2.52 2.5 2.48 2.48 2.56 2.58 2.63 2.62 2.6 2.59 2.56 2.57 2.58 2.56 2.59 2.54 2.65 2.64 2.63 2.62 2.68 2.69 2.67 2.68 2.71 2.68 2.68 2.7 2.68 2.69 2.65 2.61 2.61 2.63 2.62 2.61 2.64 2.65 2.63 2.65 2.65 2.66 2.71 2.72 2.75 2.74 2.75 2.75 2.8 2.85 2.84 2.82 2.83 2.85 2.85 2.82 2.83 2.82 2.78 2.74 2.75 2.74 2.77 2.76 2.78 2.79 2.76 2.75 2.72 2.8 2.81 2.78 2.77 2.74 2.73 2.75 2.78 2.78 2.78 2.75 2.72 2.7 2.68 2.64 2.67 2.65 2.65 2.63 2.64 2.62 2.65 2.66 2.67 2.66 2.64 2.64 2.64 2.67 2.67 2.67 2.68 2.67 2.69 2.69 2.68 2.67 2.67 2.68 2.74 2.75 2.72 2.71 2.66 2.62 2.62 2.62 2.66 2.68 2.69 2.69 2.72 2.71 2.67 2.67 2.63 2.68 2.67 2.65 2.64 2.63 2.66 2.62 2.58 2.57 2.56 2.55 2.54 2.5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值