首页 > 其他分享 >在 CSDN 上白嫖代码!

在 CSDN 上白嫖代码!

时间:2023-09-02 23:33:16浏览次数:39  
标签:上白 cnt int 代码 head dfn CSDN low include

无用的知识又要增加了~

大家喜欢用什么博客?Luogu?Cnblog?

当然,CSDN 是一个流行的博客。

但是,有些在用 cnblog 等的人(比如我)不想去注册 CSDN,然而这样 CTJ 复制代码就会很不方便。而 CSDN 我又懒得注册,怎么办呢?

哇哈哈!万恶的 HTML!直接复制 HTML!

我们就以复制这篇博文中的这坨代码为例。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 200010

int t,n,m,cnt,head[N];
struct Edge{int to,nxt;}e[N<<2];
int cut[N],sonn[N],vis[N],tot,idc;
int dfn[N],low[N];

void init()
{
    cnt=-1;tot=idc=0;
    memset(head,-1,sizeof(head));
    memset(sonn,0,sizeof(sonn));
    memset(cut,0,sizeof(cut));
    memset(vis,0,sizeof(vis));
    memset(dfn,0,sizeof(dfn));
    memset(low,0,sizeof(low));
}
void adde(int u,int v)
{
    e[++cnt].to=v;e[cnt].nxt=head[u];head[u]=cnt;
    e[++cnt].to=u;e[cnt].nxt=head[v];head[v]=cnt;
}
void dfs(int u,int fa)
{
    vis[u]=1;if(u==n) sonn[u]=1;
    bool flag=0;
    low[u]=dfn[u]=++idc;
    for(int i=head[u];~i;i=e[i].nxt)
    {
        int v=e[i].to;
        if(v==fa) continue;
        if(!vis[v])
        {
            dfs(v,u);
            low[u]=min(low[u],low[v]);
            sonn[u]|=sonn[v];
            if(sonn[v]&&low[v]>=dfn[u]) flag=1;
        }
        else low[u]=min(low[u],dfn[v]);
    }
    if(u!=1&&flag) cut[u]=1,tot++;
}
int main()
{
    for(scanf("%d",&t);t;--t)
    {
        init();
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;++i)
        {
            int u,v;scanf("%d%d",&u,&v);
            adde(u,v);
        }
        dfs(1,1);
        printf("%d\n",tot);
        for(int i=1;i<=n;++i) if(cut[i]) printf("%d ",i);
        puts("");
    }
    return 0;
}

Step. 1

在你要复制的代码上,点右键,选择“检查”。

可以看到有一行标上了高亮。这就是代码了。

在这一行上点右键,可以看到复制菜单。

那我们要复制什么呢?对了,就是内部 HTML

然后你会发现代码里面一堆 HTML 标签。

Step. 2

这样做显然不能满意。要想办法把这些可恶的 HTML 标签去掉。

通常 HTML 标签都是标在 <...> 内的。

怎么把它们去掉?

我们有 C++!我们可以编程!

就像检查合法括号序列一样,我们遇到 < 就忽略后面的内容,直到遇到 >

上代码!(假设你把 HTML 保存在了 1.html。)

#include<cstdio>
int main()
{
	FILE*f=fopen("1.html","r");
	int ch,lev=0;
	while(~(ch=fgetc(f)))
	{
		if(ch=='<')lev++;
		if(ch=='>')lev--;
		else if(!lev)putchar(ch);
	}
	return 0;
}

输出结果:

#include&lt;cstdio&gt;
#include&lt;cstring&gt;
#include&lt;algorithm&gt;
using namespace std;
#define N 200010

int t,n,m,cnt,head[N];
struct Edge{int to,nxt;}e[N&lt;&lt;2];
int cut[N],sonn[N],vis[N],tot,idc;
int dfn[N],low[N];

void init()
{
    cnt=-1;tot=idc=0;
    memset(head,-1,sizeof(head));
    memset(sonn,0,sizeof(sonn));
    memset(cut,0,sizeof(cut));
    memset(vis,0,sizeof(vis));
    memset(dfn,0,sizeof(dfn));
    memset(low,0,sizeof(low));
}
void adde(int u,int v)
{
    e[++cnt].to=v;e[cnt].nxt=head[u];head[u]=cnt;
    e[++cnt].to=u;e[cnt].nxt=head[v];head[v]=cnt;
}
void dfs(int u,int fa)
{
    vis[u]=1;if(u==n) sonn[u]=1;
    bool flag=0;
    low[u]=dfn[u]=++idc;
    for(int i=head[u];~i;i=e[i].nxt)
    {
        int v=e[i].to;
        if(v==fa) continue;
        if(!vis[v])
        {
            dfs(v,u);
            low[u]=min(low[u],low[v]);
            sonn[u]|=sonn[v];
            if(sonn[v]&amp;&amp;low[v]&gt;=dfn[u]) flag=1;
        }
        else low[u]=min(low[u],dfn[v]);
    }
    if(u!=1&amp;&amp;flag) cut[u]=1,tot++;
}
int main()
{
    for(scanf("%d",&t);t;--t)
    {
        init();
        scanf("%d%d",&amp;n,&amp;m);
        for(int i=1;i&lt;=m;++i)
        {
            int u,v;scanf("%d%d",&amp;u,&amp;v);
            adde(u,v);
        }
        dfs(1,1);
        printf("%d\n",tot);
        for(int i=1;i&lt;=n;++i) if(cut[i]) printf("%d ",i);
        puts("");
    }
    return 0;
}

看起来还可以吧?

编译一下,跑不了!

怎么回事?

Step. 3

看看代码,里面有一些 &lt; &gt; 之类的东西。

搜一下,发现这是 HTML 的转义字符串。

那怎么识别?简单,他们都是 & 开头,; 结尾的。

那特判一下即可。

把原来代码的 putchar(ch); 改成

		else if(!lev)
		{
			if(ch=='&')
			{
				int ch1,ch2,ch3;
				ch1=fgetc(f);
				ch2=fgetc(f);
				ch3=fgetc(f);
				if(ch3==';')
				{
					if(ch1=='l')putchar('<');
					else if(ch1=='g')putchar('>');
				}
				else
				{
					int ch4=fgetc(f);
					putchar('&');
				}
			}
			else putchar(ch);
		}

即可。

输出:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 200010

int t,n,m,cnt,head[N];
struct Edge{int to,nxt;}e[N<<2];
int cut[N],sonn[N],vis[N],tot,idc;
int dfn[N],low[N];

void init()
{
    cnt=-1;tot=idc=0;
    memset(head,-1,sizeof(head));
    memset(sonn,0,sizeof(sonn));
    memset(cut,0,sizeof(cut));
    memset(vis,0,sizeof(vis));
    memset(dfn,0,sizeof(dfn));
    memset(low,0,sizeof(low));
}
void adde(int u,int v)
{
    e[++cnt].to=v;e[cnt].nxt=head[u];head[u]=cnt;
    e[++cnt].to=u;e[cnt].nxt=head[v];head[v]=cnt;
}
void dfs(int u,int fa)
{
    vis[u]=1;if(u==n) sonn[u]=1;
    bool flag=0;
    low[u]=dfn[u]=++idc;
    for(int i=head[u];~i;i=e[i].nxt)
    {
        int v=e[i].to;
        if(v==fa) continue;
        if(!vis[v])
        {
            dfs(v,u);
            low[u]=min(low[u],low[v]);
            sonn[u]|=sonn[v];
            if(sonn[v]&&low[v]>=dfn[u]) flag=1;
        }
        else low[u]=min(low[u],dfn[v]);
    }
    if(u!=1&&flag) cut[u]=1,tot++;
}
int main()
{
    for(scanf("%d",&t);t;--t)
    {
        init();
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;++i)
        {
            int u,v;scanf("%d%d",&u,&v);
            adde(u,v);
        }
        dfs(1,1);
        printf("%d\n",tot);
        for(int i=1;i<=n;++i) if(cut[i]) printf("%d ",i);
        puts("");
    }
    return 0;
}

标签:上白,cnt,int,代码,head,dfn,CSDN,low,include
From: https://www.cnblogs.com/No-play-Yes-splay/p/CSDN-code-copying.html

相关文章

  • VSCode-用户代码片段,代码模板
    项目过渡到vue3,为了提高开发效率,减少重复代码编写,通过VSCode编辑器的CodeSnippets完成代码。实现效果,输入关键词Index,回车,会自动出现自定义的代码段。1.打开VSCode,点击文件=》首选项-》配置用户代码片段 2.新建全局代码片段文件,输入文件名称,并回车  3.修改模板......
  • centos stream 9 编译 python3.11.5 源代码
    wgethttps://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgztar-zxvfPython-3.11.5.tgzcdPython-3.11.5执行配置帮助./configure--help主要是想设置安装路径Installationdirectories:--prefix=PREFIXinstallarchitecture-independentfilesinP......
  • 低代码平台的出现,对与开发有哪些好处和弊端
    随着信息技术的不断发展,低代码平台已经成为了一种趋势,它可以帮助企业快速构建应用程序,降低开发成本和时间。低代码平台的出现对前端开发带来了一定的利与弊,下面我们来谈谈这些方面。一、低代码平台的优点提高开发效率低代码平台可以让开发人员使用可视化的界面来构建应用程序,......
  • TS 项目加入 ESLint 进行代码检查
    安装依赖npminstalleslint@typescript-eslint/parser@typescript-eslint/eslint-plugin--save-deveslint:ESLint核心包。@typescript-eslint/parser:用于解析TypeScript代码。@typescript-eslint/eslint-plugin:包含一些针对TypeScript的ESLint规则。创建ES......
  • [代码随想录]Day34-动态规划part02
    题目:62.不同路径思路:首先想到的是数论方法组合数其实就是向右和向下的步数是固定的,就找一个组合的个数就可以了。状态转移方程:一个位置的路径数就是,上面位置和左面位置路径数的和按照动规五部曲来分析:确定dp数组(dptable)以及下标的含义:dp[i][j]:表示从(0,0)出发,到(i,j)有d......
  • Lnton羚通智能分析算法检测人群异常聚集检测告警算法的流程代码
    Lnton羚通视频智能分析算法中人群异常聚集检测报警系统是基于yolov8图像识别和数据分析技术,人群异常聚集检测告警算法通过在关键区域布设监控摄像头,实时监测人员的密集程度和行为动态,分析和判断人群密集程度是否超过预设阈值,一旦发现异常聚集,将自动发出信号,并提示相关人员采取相应......
  • mybatis-plus自动生成代码
    1.引入pom依赖<!--mybatis-plusgenerator--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.2</version></dependency><!--velocity--&g......
  • Lnton羚通智能分析算法AI智慧工地视频分析系统代码
    AI智慧工地视频分析系统通过yolov8网络模型视频智能分析技术,AI智慧工地视频分析算法模型对画面中物的不安全状态以及现场施工作业人员的不合规行为及穿戴进行全天候不间断实时分析,发现有人不合规行为及违规穿戴抽烟打电话等立即自动抓拍存档告警。在架构方面,E-ELAN只改变了计算块......
  • 代码扫描提示:java: Compilation failed: internal java compiler error
    检查Idea中编译的版本和项目的是否一致 ......
  • 保存完整HTML代码 保存部分HTML代码,及其他方法
    print(driver.page_source)#定位至节点elem=driver.find_element(By.ID,"info")htm_dat=elem.get_property("outerHTML")print('获取节点的html源码:',htm_dat)htm_name=elem.get_property("nodeName")print('节点名称:',......