算法马拉松24

算法马拉松24

A 小C的多边形

  • 题意:

n+1个点的多边形。给外圈的边标记上1~n,里圈的边也标记上1~n,使得对于一个外圈相邻点与中间点构成的三角形的边权之和都相等。\(n \le 10^6\)

  • 题解:

显然每个三角形权值和为\(\frac{3(n+1)}{2}\)

一开始简化成n个数排一个环,相邻两个数的和不相等并且有上下界,然后并不好做

构造了一下n=5发现外圈正好1..5,内圈1,2之间填n

然后这样写一下交上就T了...不加输出优化tle 2333

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;char c[20];
inline void put(int x) {int p = 0;while(x) c[++p] = x%10 + '0', x /= 10;while(p) putchar(c[p--]);
}
int n;
void solve() {for(int i=1; i<=n; i++) put(i), putchar(' ');puts("");int sum = (n+1)/2*3-1, now = (n+3)/2-1;for(int i=1; i<=n; i++) {put(now); putchar(' ');now = sum - now;sum--;}
}
int main() {
//  freopen("in", "r", stdin);scanf("%d", &n); n--;if(~n&1) puts("0");else solve();
}


B 逆序对统计

  • 题意:

n个位置,\(1..m\)中每个数可以放在某一个位置,求逆序对最多个数。\(n \le 20, m \le 100\)

  • 题解:

比赛时几乎想到正解了qwq

从小到大枚举数,然后放一个数只会与他位置后面的数构成逆序对,把n状压一下就行了

但当时认为如果位置i已经有数了,还要减去位置i已经构成的逆序对个数,没法维护

其实完全不用考虑有数的情况,加入再删除和没加入是一样的,从没数的状态可以转移呀

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 105, M = (1<<20) + 5, INF = 1e9;
inline int read(){char c=getchar(); int x=0,f=1;while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}int n, m, a[N], all, one[M], f[2][M], cur;
void print(int x) {for(int i=n-1; i>=0; i--) printf("%c", (x & (1<<i)) ? '1' : '0'); puts("");
}
int main() {freopen("in", "r", stdin);n=read(); m=read();for(int i=1; i<=m; i++) a[i] = read() - 1;all = 1<<n;for(int i=0; i<=n; i++) one[1<<i] = 1;for(int i=1; i<all; i++) one[i] = one[i&-i] + one[i^(i&-i)];memset(f, -1, sizeof(f));f[cur][0] = 0;for(int i=0; i<m; i++, cur ^= 1) { int *g = f[cur], *d = f[cur^1];for(int s=0; s<all; s++) if(g[s] != -1) { //printf("f %d %d  %d\n", i, s, g[s]); print(s);d[s] = max(d[s], g[s]);if(~ s & (1<<a[i+1])) {int ns = s | (1<<a[i+1]); d[ns] = max(d[ns], g[s] + one[ns >> (a[i+1] + 1)]);}g[s] = -1;}}printf("%d\n", f[cur][all-1]);
}


C 俄罗斯方块

  • 题意:

\(n * m \le 10^7\)的01网格,每次将一个俄罗斯方块区域异或,问是否能全0.

  • 题解:

稍微玩一下发现可以做到:

  1. 异或两个相邻格
  2. 将一个1格任意移动

这样的话1的个数为奇数一定可行啊!

然而我忽略了网格大小,至少要是2*3才行!

这样的话特判一下2*2 和1*x

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 1e7+5;
inline int read(){char c=getchar(); int x=0,f=1;while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}int n, m, a[N];
char s[N];
int main() {freopen("in", "r", stdin);int T = read();while(T--) {n = read(); m = read();if(n == 1 || m == 1) {if(n == 1) {scanf("%s", s+1); n = m; for(int i=1; i<=n; i++) a[i] = s[i] - '0';}else for(int i=1; i<=n; i++) a[i] = read();int flag = 1;for(int i=1; i<=n; i++) if(a[i]) {if(i+3 > n) {flag = 0; break;}for(int j=i; j<=i+3; j++) a[j] ^= 1;}puts(flag ? "Yes" : "No");continue;}int cnt = 0;for(int i=1; i<=n; i++) {scanf("%s", s+1);for(int j=1; j<=m; j++) cnt += (s[j] - '0') & 1;}if(n > m) swap(n, m);if(n >= 2 && m >= 3) puts((cnt & 1) ? "No" : "Yes");else if(n == 2 && m == 2) puts(cnt == 4 || cnt == 0 ? "Yes" : "No");}
}


D 单独写了 E F弃疗

转载于:https://www.cnblogs.com/candy99/p/6793047.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HUD2795 线段树(单点更新)

题目中给出的h和w范围均大&#xff0c;其实n的最大范围才200000&#xff0c;所以我们建立的线段树大小为min(h,n),线段树的每一个节点包含一个变量c&#xff0c;记录当前区间内还剩下的可以put on的最大长度。插入一个数时&#xff0c;如果该数大于该区间最大值&#xff0c;则返…

科维PLC运行时系统ProConOS embedded CLR 2.2 特定应用

ProConOS embedded CLR是新型的开放式标准化PLC运行时系统&#xff0c;符合IEC 61131标准&#xff0c;可执行不同的自动化任务&#xff08;PLC、PAC、运动控制、CNC、机器人和传感器&#xff09;。   通过采用国际标准的微软中间语言&#xff08;依据IEC/ISO 23271标准为MSIL…

linux下vi命令大全

进入vi的命令 vi filename :打开或新建文件&#xff0c;并将光标置于第一行首 vi n filename &#xff1a;打开文件&#xff0c;并将光标置于第n行首 vi filename &#xff1a;打开文件&#xff0c;并将光标置于最后一行首 vi /pattern filename&#xff1a;打开文件&…

set()与get()详细解答(C#)

这几天在搬砖时候用到了set()与get()&#xff0c;同事问了我一些问题&#xff0c;我打算在博客中总结一下。 觉得帮助到了您&#xff0c;帮我点个赞哦。 属性访问器 其实说白了就是操作一个属性&#xff0c;更通俗一点说就是对一个变量的取值与赋值。 先来看get() get 访问…

IM应用中如何计算富文本的高度

背景 在开发IM的项目过程中&#xff0c;经常会有出现一些需要计算DOM高度&#xff0c;然后超出若干行隐藏等需求。很多时候&#xff0c;需要计算高度的DOM元素都是动态生成的&#xff0c;我们无法在数据渲染前获取到它的高度。 如果没有任何交互&#xff0c;我们可以通过CSS来实…

G代码 机器人的CNC实现

&#xfeff;  控制铣削工作台和工件的NC程序&#xff0c;通过CAD软件创建&#xff0c;这些NC程序与特定的机器类型相关。 NC程序在笛卡尔坐标系中动作的描述&#xff0c;对于需要确保一个明确的变换轴位置的关节型的机器人来说&#xff0c;缺少附加的状态和旋转信息。传…

IScroll5中文API整理,用法与参考

IScroll是移动页面上被使用的一款仿系统滚动插件。IScroll5相对于之前的IScroll4改进了许多&#xff0c;使得大家可以更方便的定制所需的功能了。 做项目的时候正好用到了这个插件&#xff0c;自己做了一下总结&#xff0c;发在这里方便大家学习IScroll5。 官网&#xff1a;htt…

Linux 安装USB摄像头

sudo apt-get updatesudo apt-get install fswebcamsudo apt-get install mplayersudo apt-get install alsamixer安装完毕ls /dev查找设备是否有video0这个设备sudo mplayer tv:// 可以看到摄像内容转载于:https://www.cnblogs.com/smartkeke/p/6820426.html

struct x264_t 维护着CODEC的诸多重要信息

//x264_t结构体维护着CODEC的诸多重要信息struct x264_t{/* encoder parameters ( 编码器参数 )*/x264_param_t param;x264_t *thread[X264_SLICE_MAX];/* bitstream output ( 字节流输出 ) */struct{int i_nal;x264_nal_t nal[X264_NAL_MAX];int i_bitstr…

如何判断一条曲线是否自己相交?

今天看到群里有人在问这个问题&#xff0c;想了一个解决办法。 我们首先作假设&#xff0c;如果一条曲线有交点&#xff0c;那么它就是相交的对吧。可能大家想的都是这样&#xff0c;就开始找各种方法去识别交点。 我们换个角度想一下&#xff1a;是不是我们判断这条曲线是否带…

XML 与网络的数据传输

&#xfeff;&#xfeff;XML 与网络的数据传输

hdu 5813 Elegant Construction

水题 题意&#xff1a;有n个城市&#xff0c;给你每个城市能到达城市的数量&#xff0c;要你构图&#xff0c;输出有向边&#xff0c;要求无环&#xff0c;输出任意的解 例&#xff1a; Sample Input 332 1 021 143 1 1 0Sample OutputCase #1: Yes21 22 3Case #2: NoCase #3: …

Redis实战笔记

Redis 数据库 一、 概要 1. 特点 用于抽象数据类型的 DSL内存存储基础数据结构 API编码风格避免代码复杂两层 API以优化为乐2. 数据类型 键值对&#xff08;字符串->字符串&#xff09;哈希列表&#xff08;链表&#xff09;集合&#xff1a;差并交有序集合 列表 集合位图…

内存申请与一级二级指针

1.如果是函数内进行内存申请&#xff0c;很简单&#xff0c;标准用法就可以了&#xff1a; test(){int *array;array(int *)malloc(sizeof(int)*10);//申请10*4 bytes&#xff0c;即10个单位的int内存单元}注意&#xff0c;malloc使用简单&#xff0c;但是注意参数和返回值&…

halcon相机标定及图像矫正(代码)

侵删 1 halcon相机标定和图像矫正 对于相机采集的图片&#xff0c;会由于相机本身和透镜的影响产生形变&#xff0c;通常需要对相机进行标定&#xff0c;获取相机的内参或内外参&#xff0c;然后矫正其畸变。相机畸变主要分为径向畸变和切向畸变&#xff0c;其中径向畸变是由透…

找寻一个邮箱

import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;public class zhengze {public static void main(String[] args) { //1.创建一个正则表达式对象Pattern pPattern.compile("[0-9]{6}"); //2.获得匹配器 String s…

先弄个XML解析器代码抄一抄 慢慢研究 O(∩_∩)O哈哈~

&#xfeff;&#xfeff;出处&#xff1a;http://bbs.csdn.net/topics/390229172 已经自我放逐好几年了.打算去上班得了.在最后的自由日子里,做点有意义的事吧... 先来下载地址 http://www.kuaipan.cn/file/id_12470514853353274.htm 已经在很多正式,非正式的场合…

紫书 例题8-10 UVa 714 (二分答案)

这道题让最大值最小&#xff0c; 显然是二分答案当题目求的是最大值最小&#xff0c; 最小值最大&#xff0c; 这个时候就要想到二分答案为什么可以二分答案呢&#xff0c; 因为这个时候解是单调性的&#xff0c; 如果简单粗暴一点就全部枚举一遍&#xff0c; 验证答案。但是因…

was not declared in this scope

“was not declared in this scope”是一个错误信息&#xff0c;在编译的时候会遇到。其含义为标识符在其出现的地方是未被定义的。 出现该错误的时候&#xff0c;会同时把未定义的变量名显示出来。比如如下程序&#xff1a; int main(){ printf("%d",i);//这个i是…

函数参数的传递问题(一级指针和二级指针)

函数参数的传递问题&#xff08;一级指针和二级指针&#xff09; [转]原以为自己对指针掌握了&#xff0c;却还是对这个问题不太明白。请教&#xff01; 程序1&#xff1a; void myMalloc(char *s) //我想在函数中分配内存,再返回 { s(char *) malloc(100); } void …