首页 > 其他分享 >「实用」如何在洛谷上正确的抄题解

「实用」如何在洛谷上正确的抄题解

时间:2024-04-25 19:45:36浏览次数:22  
标签:洛谷 int 题解 ll long 实用 include

前言

看到这个标题,估计一群人又要开始躁动不安了……

等一下,如果是洛谷的管理员看到了这篇文章,不要把我给封了,我是在教各位刚入门的小萌新,也就是以后的神犇们如何切水题呢!本文没有任何反对洛谷的意思,坚决支持kkk!

好了,进入今天的正题,“如何在洛谷上正确的抄题解”这个标题直接概括了文章的意思吧!今天,我们就以NOIP2002年的真题,也就是这道题为例,来讲一讲如何正确的抄题解并且不被管理员赐予屎黄名(暗示管理员)

复制会吧,粘贴也会吧?

我们随便打开一道题目的题解,就以这个人为例,这是TA的原代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll C(int m,int n)
{
    if(n<0 || m<0 || n<m)
        return 0;
    ll tot=1;
    for(int i=1;i<=m;i++)
    {
        tot*=n-i+1;
        tot/=i;
    }
    return tot;
}
int n,m,x,y;
int rt[5][5]={
0,0,1,0,0,
0,0,1,1,0,
0,0,0,1,1};//我们记录下哪些节点作为起点时,可以从右边的口子出去,其中(2,2)为马的位置
int dw[5][5]={
{},
{},
1,1,0,0,0,
0,1,1,0,0,
0,0,1,0,0};//同理,哪些可以从下边口子出去
int main()
{
    cin>>n>>m>>x>>y;
    if(n-x<3 && m-y<3)
    {
        x=n-x;
        y=m-y;
    }//为了不想把特判代码写两遍,如果终点离得太近就旋转180度,变成起点离得太近的情况
    if(x<3 && y<3)
    {
        int nx=2-x;
        int ny=2-y;//起点相对于马的坐标而言的位置
        ll tot=0;
        tot+=C(n-x,m+n-x-y-3)*rt[nx][ny];//右边出去的方法数
        tot+=C(n-x-3,m+n-x-y-3)*dw[nx][ny];//同理
        cout<<tot;
        return 0;
    }
    ll tot=C(n,n+m);
    for(int i=-2;i<=2;i++)
        tot-=C(x-i,x+y)*C(n-x+i,n+m-x-y);
    //情况1
    tot+=C(x+2,x+y-1)*C(n-x-3,n+m-x-y-1);//情况2
    tot+=C(x-3,x+y-1)*C(n-x+2,n+m-x-y-1);//情况3
    tot+=C(x,x+y-3)*C(n-x-3,n+m-x-y-3);//情况4
    tot+=C(x-3,x+y-3)*C(n-x,n+m-x-y-3);//情况5
    cout<<tot;
    return 0;
}

可以看到TA是直接使用dp来做的,当然如果有些人嘴硬说什么复制粘贴不会啊什么的,你可以立刻冲上去打他一顿你可以耐心的教一教TA,毕竟谁还不是从那个时候过来的啊!

可以看到洛谷题解区中的代码块是没有直接全部复制选项的(虽然这没什么用),但是我们依然可以通过ctrl+cctrl+v来进行快速的复制与粘贴,所以你学废了吗?不要忘了点一个推荐帮忙推荐一下哦!

删除注释

你见过哪个人没有事干在自己做题的时候,还是那种简单题的时候写注释的吗?所以,想要在洛谷上正确的抄题解,还需要删除注释,不然的话一看就能看出来你是在抄题解,删完注释后,这个人的代码就变成了这样:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll C(int m,int n)
{
    if(n<0 || m<0 || n<m)
        return 0;
    ll tot=1;
    for(int i=1;i<=m;i++)
    {
        tot*=n-i+1;
        tot/=i;
    }
    return tot;
}
int n,m,x,y;
int rt[5][5]={
0,0,1,0,0,
0,0,1,1,0,
0,0,0,1,1};
int dw[5][5]={
{},
{},
1,1,0,0,0,
0,1,1,0,0,
0,0,1,0,0};
int main()
{
    cin>>n>>m>>x>>y;
    if(n-x<3 && m-y<3)
    {
        x=n-x;
        y=m-y;
    }
    if(x<3 && y<3)
    {
        int nx=2-x;
        int ny=2-y;
        ll tot=0;
        tot+=C(n-x,m+n-x-y-3)*rt[nx][ny];
        tot+=C(n-x-3,m+n-x-y-3)*dw[nx][ny];
        cout<<tot;
        return 0;
    }
    ll tot=C(n,n+m);
    for(int i=-2;i<=2;i++)
        tot-=C(x-i,x+y)*C(n-x+i,n+m-x-y);
    tot+=C(x+2,x+y-1)*C(n-x-3,n+m-x-y-1);
    tot+=C(x-3,x+y-1)*C(n-x+2,n+m-x-y-1);
    tot+=C(x,x+y-3)*C(n-x-3,n+m-x-y-3);
    tot+=C(x-3,x+y-3)*C(n-x,n+m-x-y-3);
    cout<<tot;
    return 0;
}

看起来也是十分的赏心悦目~

终极优化:改码风

还记得这篇博客吗?根据他,我们可以进行最终优化!!!

最终版

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll C(int m,int n) {
    if(n < 0 || m < 0 || n < m) return 0;
    ll tot = 1;
    for(int i = 1; i <= m; ++ i) {
        tot *= n - i + 1;
        tot /= i;
    }
    return tot;
}
int n, m, x, y;
int rt[5][5] = {0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1};
int dw[5][5]={{ }, { },1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0};
int main() {
    cin >> n >> m >> x >> y;
    if(n - x < 3 && m - y < 3) {
        x = n - x;
        y = m - y;
    }
    if(x < 3 && y < 3) {
        int nx = 2 - x; 
        int ny = 2 - y;
        ll tot = 0;
        tot += C(n - x, m + n - x - y - 3) * rt[nx][ny];
        tot += C(n - x - 3, m + n - x - y - 3) * dw[nx][ny];
        cout << tot;
        return 0;
    }
    ll tot = C (n, n + m);
    for(int i = -2; i <= 2 ; ++ i)
        tot -= C(x - i, x + y) * C(n - x + i, n + m - x - y);
    tot += C(x + 2, x + y - 1) * C(n - x - 3, n + m - x - y - 1);
    tot += C(x - 3, x + y - 1) * C(n - x + 2, n + m - x - y - 1);
    tot += C(x, x + y - 3) * C(n - x - 3, n + m - x - y - 3);
    tot += C(x - 3, x + y - 3) * C(n - x, n + m - x- y - 3);
    cout << tot;
    return 0;
}

原版

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll C(int m,int n)
{
    if(n<0 || m<0 || n<m)
        return 0;
    ll tot=1;
    for(int i=1;i<=m;i++)
    {
        tot*=n-i+1;
        tot/=i;
    }
    return tot;
}
int n,m,x,y;
int rt[5][5]={
0,0,1,0,0,
0,0,1,1,0,
0,0,0,1,1};//我们记录下哪些节点作为起点时,可以从右边的口子出去,其中(2,2)为马的位置
int dw[5][5]={
{},
{},
1,1,0,0,0,
0,1,1,0,0,
0,0,1,0,0};//同理,哪些可以从下边口子出去
int main()
{
    cin>>n>>m>>x>>y;
    if(n-x<3 && m-y<3)
    {
        x=n-x;
        y=m-y;
    }//为了不想把特判代码写两遍,如果终点离得太近就旋转180度,变成起点离得太近的情况
    if(x<3 && y<3)
    {
        int nx=2-x;
        int ny=2-y;//起点相对于马的坐标而言的位置
        ll tot=0;
        tot+=C(n-x,m+n-x-y-3)*rt[nx][ny];//右边出去的方法数
        tot+=C(n-x-3,m+n-x-y-3)*dw[nx][ny];//同理
        cout<<tot;
        return 0;
    }
    ll tot=C(n,n+m);
    for(int i=-2;i<=2;i++)
        tot-=C(x-i,x+y)*C(n-x+i,n+m-x-y);
    //情况1
    tot+=C(x+2,x+y-1)*C(n-x-3,n+m-x-y-1);//情况2
    tot+=C(x-3,x+y-1)*C(n-x+2,n+m-x-y-1);//情况3
    tot+=C(x,x+y-3)*C(n-x-3,n+m-x-y-3);//情况4
    tot+=C(x-3,x+y-3)*C(n-x,n+m-x-y-3);//情况5
    cout<<tot;
    return 0;
}

对比也是十分的明显!

好了,这篇博客就水到这里,记得点个推荐,我们下次再见!

标签:洛谷,int,题解,ll,long,实用,include
From: https://www.cnblogs.com/charzie-blog/p/18158427

相关文章

  • [题解]CF61E Enemy is weak
    CF61EEnemyisweak如下图,第\(i\)行\(j\)列表示第\(j\)个数结尾,向前长度为\(i\)的逆序子序列个数。递推方式见下图。第一行全为\(1\)。要填第\(2\)行的值,就往前找所有\(>\)当前元素的位置,把它们第\(1\)行的值加起来。要填第\(3\)行的值,就往前找所有\(>\)当前元素的位置,把......
  • 「洛谷」题解:P1996 约瑟夫问题
    题目传送门先看题目:题目描述\(n\)个人围成一圈,从第一个人开始报数,数到\(m\)的人出列,再由下一个人重新从\(1\)开始报数,数到\(m\)的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰......
  • [题解] [NOIP2011 提高组] Mayan 游戏
    [题解][NOIP2011提高组]Mayan游戏题目描述有一个\(7\)行\(5\)列的格子棋盘,有的格子上有方块。方块有重力,即如果一个方块下面没有其他方块,他就会往下掉,直到触底或者下面有方块为止。每个方块都有自己的颜色,如果连着三个竖着或者横着的方块颜色相同,它们就会消除。如果出......
  • 洛谷题单指南-动态规划2-P1874 快速求和
    原题链接:https://www.luogu.com.cn/problem/P1874题意解读:一个数字字符串s,分解成几个整数,和为n,计算最少加号个数,也就是计算最少分解的整数个数-1。解题思路:此题虽然分类在动态规划,但数据量不大,DFS更加直观和易于理解,所以采用DFS暴搜+剪枝来解决。搜索思路是对数字字符串依次枚......
  • PostMan接口测试实用小点
    PostMan接口测试实用小点1.接口测试变量存取操作在Postman中有很多地方可以存储一些变量,这里只介绍经常使用的环境变量.变量设置后,在UI界面可以通过{{变量名}}获取到对应值.在环境变量中配置变量url=https://ct.ctrip.com在请求地址栏配置{{url}}/SwitchAPI/Order/Tick......
  • CF1774G Segment Covering 题解
    题目链接点击打开链接题目解法这么牛的题!!!我第一眼看到偶\(-\)奇想到的是LGV/xk有一堆线段的题先考虑有没有线段之间的特殊关系这道题中,如果有线段\(x\)包含线段\(y\),则线段\(x\)是无用的,因为如果选了\(x\),那么选不选\(y\)无所谓,因为是偶\(-\)奇,所以贡献抵消了......
  • 重庆软航H5 PDF签章产品经nginx代理之后在浏览器中在线打开PDF盖章时提示:签章失败:网络
    问题现象:问题描述:在系统中集成了软航H5PDF签章产品,软航H5PDF签章产品的对应服务是通过nginx代理的,在奇安信浏览器中在线打开PDF点击产品的工具栏上的盖章按钮:选定印章之后,在PDF文档上选定盖章位置之后,提示:签章失败:网络错误。最近在做这个软航H5PDF电子签章产品的测试,就简......
  • CF518F 题解
    观察到一条管道的拐点数量只有\(3\)种可能的取值:没有拐点,即管道呈现一条直线。有\(1\)个拐点。有\(2\)个拐点。分别对应了下面三种情况:....#....#.*..#*********..***...#....#*...#*.#.........
  • 2023CPCC河南省赛题解+总结
    2023CPCC河南省赛题解+总结比赛链接:https://codeforces.com/gym/104354答题情况:答题情况开题顺序是:A-F-H-K-E-B-G题面链接:https://codeforces.com/gym/104354/attachments/download/20061/statements_2.pdfProblemA.小水獭游河南签到题,队友写的题意:  给你一个字符......
  • git命令下,mac环境下载依赖相关报错问题解决方案
    1.安装fundry框架curl-Lhttps://foundry.paradigm.xyz|bash2.写入环境变量source/Users/xx/.bashrc3.foundryup问题1报错:致命错误:无法访问'https://github.com/foundry-rs/forge-std解决方案:设置hosts文件:添加指定url的ip地址:140.82.112.4github.com185.1......