首页 > 其他分享 >初三奥赛模拟测试1

初三奥赛模拟测试1

时间:2024-03-10 18:13:56浏览次数:22  
标签:int number x2 奥赛 y1 510 x1 初三 模拟

初三奥赛模拟测试1

\(T1\) 回文 \(0pts\)

  • 设 \(f_{x_{1},y_{1},x_{2},y_{2}}\) 表示从 \((1,1)\) 到 \((x_{1},y_{1})\) 结束的回文路径条数,其中 \((x_{1},y_{1})\) 关于最终形成的回文串的回文中心的对称点为 \((x_{2},y_{2})\) 。状态转移方程为 \(f_{x_{1},y_{1},x_{2},y_{2}}= \begin{cases} f_{x_{1}-1,y_{1},x_{2},y_{2}+1}+f_{x_{1}-1,y_{1},x_{2}+1,y_{2}}+f_{x_{1},y_{1}-1,x_{2},y_{2}+1}+f_{x_{1},y_{1}-1,x_{2}+1,y_{2}} & A_{x_{1},y_{1}}=A_{x_{2},y_{2}} \\ 0 & A_{x_{1},y_{1}} \ne A_{x_{2},y_{2}} \end{cases}\)

    • 因为合法的路径一定满足 \(x_{1}+y_{1}+x_{2}+y_{2}=n+m+2\) ,故可以省去 \(y_{2}\) 这一维。
  • 在对角线(非严格意义)统计答案即可。

    点击查看代码
    const ll p=993244853;//注意模数不是998244353
    int f[510][510][510];
    char c[510][510];
    int main()
    {
        int n,m,i,j,x1,x2,y1,y2,ans=0;
        cin>>n>>m;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                cin>>c[i][j];
            }
        }
        f[1][1][n]=(c[1][1]==c[n][m]);
        for(x1=1;x1<=n;x1++)
        {
            for(y1=1;y1<=m;y1++)
            {
                for(x2=min(n,n+m+2-x1-y1),y2=n+m+2-x1-y1-x2;x2>=x1&&y2<=m;x2--,y2++)
                {
                    if(y2>=1&&c[x1][y1]==c[x2][y2])
                    {
                        f[x1][y1][x2]=(f[x1][y1][x2]+f[x1-1][y1][x2])%p;
                        f[x1][y1][x2]=(f[x1][y1][x2]+f[x1-1][y1][x2+1])%p;
                        f[x1][y1][x2]=(f[x1][y1][x2]+f[x1][y1-1][x2])%p;
                        f[x1][y1][x2]=(f[x1][y1][x2]+f[x1][y1-1][x2+1])%p;
                    }
                }
            }
        }
        for(x1=1;x1<=n;x1++)
        {
            for(y1=1;y1<=m;y1++)
            {
                x2=x1;
                y2=y1;
                if(x1+y1+x2+y2==n+m+2)
                {
                    ans=(ans+f[x1][y1][x2])%p;
                }
                x2=x1+1;
                y2=y1;
                if(x1+y1+x2+y2==n+m+2)
                {
                    ans=(ans+f[x1][y1][x2])%p;
                }
                x2=x1;
                y2=y1+1;
                if(x1+y1+x2+y2==n+m+2)
                {
                    ans=(ans+f[x1][y1][x2])%p;
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    

\(T2\) 快速排序 \(0pts\)

点击查看 qsort/qsort_example.cpp
struct number
{
	bool isnan;
	int value;
};
bool operator < (const number& x, const number& y)
{
	if(x.isnan || y.isnan)
		return false;
	return x.value < y.value;
}
number tmp[1 << 20];
void qsort(number* _begin, number* _end)
{
	if(_begin + 1 >= _end)
		return;
	number a = *_begin, *s = _begin, *t = tmp;
	for(number* p = _begin + 1; p < _end; p++)
	{
		if(*p < a)*s = *p, s++;
		else *t = *p, t++;
	}
	*s = a, s++;
	for(t--; t >= tmp; t--) *(s + (t - tmp)) = *t;
	qsort(_begin, s - 1);
	qsort(s, _end);
}
  • 部分分

    • \(12pts\) :因输入中不包含 nan ,故直接排序即可。
  • 正解

    • 因当 left.isnan=1 时,有 (A[i]<left)=0,故 L+1R 的数都不会被放到 left 前;否则将 L+1R 中小于 left.value 的数从小到大放到 left 前面。
    • multiset 大法好,注意迭代器失效问题。
    点击查看代码
    int b[600000];
    string a[600000];
    multiset<int>vis;
    int main()
    {
        int t,n,i,j,k;
        cin>>t;
        for(i=1;i<=t;i++)
        {
            cin>>n;
            for(j=1;j<=n;j++)
            {
                cin>>a[j];
                if(a[j]!="nan")
                {
                    b[j]=0;
                    for(k=0;k<a[j].size();k++)
                    {
                        b[j]=b[j]*10+a[j][k]-'0';
                    }
                    vis.insert(b[j]);
                }
            }
            for(j=1;j<=n;j++)
            {
                if(a[j]=="nan")
                {
                    cout<<"nan"<<" ";
                }
                else
                {
                    if(vis.find(b[j])!=vis.end())				
                    {
                        while(*vis.begin()<b[j])
                        {
                            cout<<*vis.begin()<<" ";
                            vis.erase(vis.begin());
                        }
                        cout<<b[j]<<" ";
                        vis.erase(vis.find(b[j]));
                    }
                }
            }
            cout<<endl;
        }
        return 0;
    }
    

\(T3\) 混乱邪恶 \(0pts\)

\(T4\) 校门外歪脖树上的鸽子 \(0pts\)

点击查看官方题解

总结

  • \(T1\)
    • 模数建议复制题面,注意不要打错。
  • \(T2\)
    • 要搞清算法的本质。
    • 要提高读伪代码能力。

标签:int,number,x2,奥赛,y1,510,x1,初三,模拟
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18064513

相关文章

  • Python scapy模拟dhcp客户端
    安装scapyaptinstall-ypython3-scapy1.发送dhcpdiscover广播报文2.sniff抓包,收到dhcpoffer广播报文3.发送dhcprequest广播报文4.sniff抓包,收到dhcpack广播报文importthreadingfromscapy.allimport*fromscapy.layers.l2importEtherdefsend_dhcp_discover......
  • 初三奥赛模拟测试1
    前言比赛链接总分:\(107pts\)\(T1~79pts:\)坐标\(DP\),赛时感觉打的是正解,但是打假了。\(T2~28pts:\)理解错题了,以为是帮他调程序了,于是给人家调\(TLE\)了。\(T3~0pts,T4~0pts:\)没啥好说的,不会。官方题解T1回文点击查看题面部分分:部分分没什......
  • 关于 Linux 中模拟鼠标
    问题的背景是我想用自动化脚本来玩StardewValley的小游戏,刷钱,但是遇到了一系列问题,这里记录我的一些历程。pyautogui/pydirectinputpyautogui是我第一个考虑的方案。虽然可以正常的移动鼠标,点击,但是游戏内却没有点击事件。搜索发现一般游戏在windows下使用的是directX,所......
  • NOIP2024 模拟赛1
    \(2023\)赛年的结束,\(2024\)赛年的开始。我们会继续前行,也永远会。如今走过这世间万般流连翻过岁月不同侧脸措不及防闯入你的笑颜我曾难自拔于世界之大也沉溺于其中梦话不得真假不做挣扎不惧笑话我曾将青春翻涌成她也曾指尖弹出盛夏心之所动且就随缘去吧逆着光......
  • 模拟赛c题补题
    暴力的写法会导致题目超时所以采用前缀和但是前缀和如果只靠一个数组表示会很绕https://vjudge.net/contest/614523#problem/C暴力代码(过不了)点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintp=2e5+10;ints1[p],s2[p],qq[p];intmain(){ intn,......
  • Vjudge模拟小组
    A-FlagofBerland思路:Code:#include<bits/stdc++.h>usingnamespacestd;constintN=105;intn,m;vector<string>s(N),ss(N);boolcheck(intn,intm){if(n%3)returnfalse;intdivide=n/3;if(s[divide]==s......
  • 初三奥赛模拟测试1--T1回文
    初三奥赛模拟测试1--\(T1\)回文HZOI题意给定一个\(n\timesm\)的,由字符组成的矩阵\(A\),问你由\((1,1)\)开始,点\((i,j)\)只可以往\((i+1,j)\)和\((i,j+1)\)走,走到\((n,m)\)停。记录路径,问由路径上的字符构成的字符串能是回文串......
  • SSK:超级键盘模拟器,调用底层,可模拟所有按键
    SSK-吵架键盘模拟器SuperSimulatorofKeyboard调用系统底层,能够模拟所有键盘操作!本程序结合快Key(QuicKeys智能登录助手)一起使用,能够创造更多奇迹!【下载】点击下载 SSK:超级键盘模拟器:https://files.cnblogs.com/files/BigSystemsView/SSK-%E8%B6%85%E7%BA%A7%E9%94%A......
  • 前端页面使用js模拟ping命令
    letuserIpAddress='';//创建XMLHttpRequest对象varxhr=newXMLHttpRequest();xhr.open('GET','https://api.ipify.org/?format=json');//调用第三方API获取IP地址xhr.onload=function(){if(xhr.status===......
  • 模拟退火学习笔记
    模拟退火,优雅的暴力我认为有必要摘抄一下提单上的简介ZX写的前言:本片适用于模拟退火入门-进阶模拟退火(SA)是一种随机化算法。当一个问题的方案数量极大(甚至是无穷的)而且不是一个单峰函数时,我们常使用模拟退火求解。一般的,很多题都可以用模拟退火水过,在OI界称之[优雅的暴......