at beg407

at beg407

hehe_0

A:小数计算比较

B:精度输出,要求最后输出精度要精确到1e-9

for(int i=1;i<=6;i++)
	{
		for(int j=1;j<=6;j++)
		{
			cnt++;
			if(i+j>=x||abs(i-j)>=y)
			{
				s++;			
			}
		}
	}
	ans=double(s)/double(cnt);
	printf("%.10lf",ans);

C:观察407的样例去找规律,发现数字之间的大小关系会影响2的执行次数

从后往前考虑,最后一个至少要$s_n$次,然后前面就是需要迎合大小关系,比如47,就应该是把这个4加到和0差3的位置,然后后面加0再加到47,若次数为x则有(x+$s_{n-1}$)$ mod $ 10 ==$s _ n$

以此向前就是次数相加加上最后sn的操作次数%10==si(不想打md了

D:他这个数据范围很小,就可以搜索,貌似就算是你2e21的枚举然后20的check都能过,然后搜索的话因为这个板子横着竖着都可以,所以从左上开始到右下,但是要注意别n和m别越界,然后枚举放不放,横着竖着

	if(!vis[x][y]) 
	nw^=a[x][y];
	dfs(x,y+1,nw);
	if(!(vis[x][y]|vis[x][y+1])&&y+1<= m)
	{
		vis[x][y]=1;
		vis[x][y+1]=1;
		dfs(x,y+1,nw);
		vis[x][y]=0;
		vis[x][y+1]=0;
	}
	if(x+1<=n&&!(vis[x][y]|vis[x+1][y]))
	{
		vis[x][y]=1;
		vis[x+1][y]=1;
		dfs(x,y+1,nw);
		vis[x][y]=0
		vis[x+1][y]=0;
	}

E:这个题我读了好长时间,英语题面还是不适应,他原来不是要对这些数字匹配相等,而是匹配然后拿去这些值。第一印象会是dp,但是发现第一个肯定要取,然后后面肯定是尽可能拿大的按顺序,但是这样子又会影响后面的取舍,感觉500*2e5dp会爆啊。然后再读题,第一个限制条件很关键啊,最后卡点才读懂这题意思。他要子序列里面至少有一半都是左括号。这样子就是肯定最大的数字拿去当左括号,如果到奇数个了,要考虑加左括号了。这个最大数字可以考虑用优先队列维护,然后这个最大我们肯定要,然后第一条件限制了我们也直接要

	for(int i=1;i<=(n<<1);i++)
    {
		cin>>x;
		q.push(x);
		if(i%2)
        {
             int y=q.top();
             q.pop();
			ans+=y;
		}
	}

F:因为时间关系,昨天读的是数学,因为长度为1那就是求和,然后2的话就是两端不要1次然后每个要两次,3就是两端不要三次,次端不要一次,然后每个加3次。但是感觉这种做法有点假

G:他是直接把数据换成负数了吗,然后我感觉得换成补码之后还得有别的优化吧,没写

posted @ 2025-05-25 09:17  Hehe_o  阅读(29)  评论(0)    收藏  举报