Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:10:00

1001-Mod, Or and Everything

真正的签到题

题意: 给定一个整数 n。计算 (n mod 1) | (n mod 2) | ... | (n mod (n - 1)) | (n mod n)。(|为"或运算")

由于是或运算,找到最大的数(在n/2和n/2+1中找),得到二进制中最多位数m,结果就是用1填满这些位数,即2^m-1(m为最大数二进制的位数)

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <cstring>
#include <vector>
#include <cmath> #define ri int using namespace std;
typedef int lll;
typedef long long ll; const ll mod=1e9+7;
inline ll gcd(ll a,ll b) {
return (!b)?a:gcd(b,a%b);
}
const ll inf=999999999; ll t;
ll n; ll finds(ll x)
{
ll f=1;
while(f<=x)
{
f=f*2;
}
return f-1;
} int main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0); cin >> t;
while(t--)
{
cin >> n;
if(n==1||n==2) cout << 0 << '\n';
else if(n==3) cout << 1 << '\n';
else
{
ll n1=n/2,n2=n1+1;
n1=n%n1,n2=n%n2;
ll ans=n1 > n2 ? n1 : n2;
cout << finds(ans) << '\n';
}
}
return 0;
}

1005-Minimum spanning tree

题意: 给定 n-1 个点,编号从 2 到 n,两点 a 和 b 之间的边权重为 lcm(a, b)。 请找出它们形成的最小生成树。

简单画成哈斯图就知道规律了,是质数就插在2上,其他插在自己因子上,故质数*2+合数,数据大用线性筛找质数

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <cstring>
#include <vector>
#include <cmath> #define ri int using namespace std;
typedef int lll;
typedef long long ll; const ll mod=1e9+7;
inline ll gcd(ll a,ll b) {
return (!b)?a:gcd(b,a%b);
}
const ll inf=999999999;
const ll N = 10000000+10;
vector<ll> vis(N);
vector<ll> prime(N); ll k=0; void isprime()
{
for(ri i=2;i<N;i++)
{
if(!vis[i]) prime[++k]=i;
for(ri j=1;j<=k&&(i*prime[j]<N);j++)
{
vis[i*prime[j]]=1;
if(!i%prime[j]) break;
}
}
}
ll t;
ll n; int main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0); isprime();
vector<ll> dp(N);
dp[2]=0,dp[3]=6;
ll now=3;
for(ri i=4;i<=N-5;i++)
{
if(prime[now]==i)
{
dp[i]=dp[i-1]+(2*i);
now++;
}
else dp[i]=dp[i-1]+i;
}
cin >> t;
while(t--)
{
cin >> n;
cout << dp[n] << '\n';
}
return 0;
}

1006-Xor sum

题意:

给定一个长度为 n 的整数序列,找出最短的连续子序列,其异或和不小于 k。

如果有多个相同长度的连续子序列,则打印左端点最小的连续子序列。

如果没有连续的子序列,异或和不小于k,就打印“-1”。

第一次做这种XOR序列的题目,记录一下。主要用到 XOR前缀01trie树 两种重要的优化手段

XOR(a[l..r]) = XOR(a[1..r]) xor XOR(a[1..l-1]) ,并且 a=a^b ^ b ,b= a^b ^ a

区间异或和可以转化为区间端点之间的xor ,即找ai,aj(i<j),使ai ^ aj >=k,且min(j-i+1)。

其中01trie树可以在logn复杂度在 某些数 中找到能与 某个数 取最大异或结果那个数

故从右R开始,把1...R-1看成 某些数 ,R看成 某个数 ,找最大的xor结果,如果结果>=k,检查区间长度并更新即可(R从1开始增长就好)

#include<bits/stdc++.h>
#define ri int
using namespace std;
typedef long long lll;
typedef int ll; const ll N=1e5+50;
ll t[N*31+10][2];
ll val[N],a[N];
ll cnt,n,k,T; void _init() //多组输入注意清空树
{
for(ri i=0;i<=cnt;i++)
{
t[i][0]=t[i][1]=val[i]=0;
}
cnt=0;
} void add(ll x,ll pos) //把x插入trie树中,val记录下标
{
ll now=0,y=0;
for(ri i=31;i>=0;i--)
{
y=(x >> i) & 1;
if(!t[now][y]) t[now][y]=++cnt;
now=t[now][y];
}
val[now]=pos;
} ll ask(ll x) //查找最大符合的数
{
ll now=0,y=0;
for(ri i=31;i>=0;i--)
{
y=(x >> i) & 1;
if(t[now][y ^ 1]) now=t[now][y ^ 1];
else now=t[now][y];
}
return val[now]; //同样返回下标
} int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0); cin >> T;
while(T--)
{
_init();
cin >> n >> k;
for(ri i=1;i<=n;i++)
{
cin >> a[i];
a[i]^=a[i-1]; //前缀XOR和
}
ll l=-1,r=n+1,len=n+1; for(ri i=1;i<=n;i++) //R从1开始增长即可
{
ll R=i,L=ask(a[i]);
if((a[R]^a[L])>=k) //如果>=k
{
if(R-L<len) len=R-L,r=R,l=L+1; //判断是否需要更新
}
add(a[i],i);
} l==-1 ? cout << l << '\n' : cout << l << ' ' << r << '\n'; //一次都没有更新则不存在
} return 0;
}

1008-Maximal submatrix

题意: 给出一个N * M矩阵,求出最大的列上升子矩阵.

将矩阵化成0-1矩阵,压缩成一维求一维柱状体最大面积,由于怕全为0卡数据,转化后将所有0的变为1即可

#include<bits/stdc++.h>
#define ri int
using namespace std;
typedef long long lll;
typedef int ll; ll n,m; ll a[2005][2005];
ll mp[2005][2005]; int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
mp[i][j]=(mp[i-1][j]+1)*(a[i][j]>=a[i-1][j]);
if(!mp[i][j]) mp[i][j]=1;
}
} ll stk[3000],tt=0;
ll maxx=0;
for(ri i=1;i<=n;i++)
{
mp[i][m+1]=-1,tt=0;
for(ri j=1;j<=m+1;j++)
{
if(!tt||mp[i][j]>=mp[i][stk[tt]]) stk[++tt]=j;
else
{
ll now=0,top=0;
while(tt&&mp[i][j]<mp[i][stk[tt]])
{
top=stk[tt--];
now=(j-top)*mp[i][top];
maxx=max(now,maxx);
}
stk[++tt]=top;
mp[i][top]=mp[i][j];
}
}
}
cout << maxx << '\n';
} return 0;
}

1009-KD-Graph

签到题是图论还没做出,大大滴有问题(主要是题目都没看)

题目大意:是要我们找到一个集合内所有边的权值小于等于某个数D,剩下的集合权值都大于某个数D,并且整体集合数为K.

思路 :先按照边的权值排序,从小往大合并集合,当集合数达到K个数时,更新D的值,并判断下一个边的权值大小和此时D的大小关系即可。

输入:n(顶点个数),m(边数),k(要求集合个数)

m组:起点x,终点y,权值z

输出:题目中要求的某个数D,若找不到输出“-1”

代码如下:

#include <bits/stdc++.h>
#define ri int typedef int lll;
typedef long long ll;
using namespace std; const ll mod=80112002;
const ll inf=999999999; const ll N=5e5+5; ll n,m,k;
struct dd{
ll x,y,z;
}a[N]; ll t;
bool cmp(dd a,dd b)
{
return a.z<b.z;
} ll p[N];
ll getp(ll x) //集合合并当然是并查集
{
return p[x]==x ? x : p[x]=getp(p[x]);
} int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0); cin >> t;
while(t--)
{
cin >> n >> m >> k;
for(ri i=1;i<=n;i++) p[i]=i;
for(ri i=1;i<=m;i++) cin >> a[i].x >> a[i].y >> a[i].z;
if(n==k) //特判
{
cout << 0 << '\n';
continue;
}
sort(a+1,a+1+m,cmp); ll nums=n; //当前集合个数number_set
ll ans=-1;
ll px,py;
for(ri i=1;i<=m;i++)
{
px=getp(a[i].x),py=getp(a[i].y);
if(px==py) continue; //如果本身是同一个集合则不用考虑 if(nums-1==k) //集合数为k时更新
{
ans=a[i].z;
}
else if(nums-1<k) //为k后判断下一条边
{
if(ans>=a[i].z) ans=-1; //找不到D
break;
}
p[px]=py;nums--;
}
if(ans==-1) cout << "-1\n";
else cout << ans << '\n';
}
return 0;
}

2021“MINIEYE杯”(1)的更多相关文章

  1. 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)

    前言 依旧是白嫖账号,只打了一些题/kk 正题 1002 Buying Snacks 题目大意 \(n\)个物品,每个可以买一次也可以不买,如果买需要选择\(1/2\)块钱的,然后也可以相邻两个一起买 ...

  2. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解

    前言 找大佬嫖到个号来划水打比赛了,有的题没写或者不是我写的就不放了. 目前只有:1004,1005,1007,1008,1011 正题 题目链接:https://acm.hdu.edu.cn/con ...

  3. Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again

    Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again https://ac.nowcoder.com/acm/contest/700/I 时间限制:C/C++ 1 ...

  4. 2021羊城杯比赛复现(Crypto)

    bigrsa 题目: from Crypto.Util.number import * from flag import * n1 = 10383529640908175186077053551474 ...

  5. 2021蓝桥杯省赛B组(C/C++)E.路径【最短路DP】

    2021蓝桥杯省赛B组题目(C/C++)E.路径 最短路径, 因为变化情况比较多, 所以开始想的是深搜, 但是太慢了, 跑不出来, 后来就想着优化一下, 有的地方到另一个地方可能会考虑很多遍, 于是考 ...

  6. 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版

    2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...

  7. 2021 羊城杯WriteUP

    比赛感受 题目质量挺不错的,不知道题目会不会上buu有机会复现一下,躺了个三等奖,发下队伍的wp Team BinX from GZHU web Checkin_Go 源码下载下来发现是go语言写的 ...

  8. Minieye杯第十五届华中科技大学程序设计邀请赛网络赛D Grid(简单构造)

    链接:https://ac.nowcoder.com/acm/contest/560/D来源:牛客网 题目描述 Give you a rectangular gird which is h cells ...

  9. H-Modify Minieye杯第十五届华中科技大学程序设计邀请赛现场赛

    题面见 https://ac.nowcoder.com/acm/contest/700#question 题目大意是有n个单词,有k条替换规则(单向替换),每个单词会有一个元音度(单词里元音的个数)和 ...

  10. Minieye杯第十五届华中科技大学程序设计邀请赛网络赛 部分题目

    链接:https://pan.baidu.com/s/12gSzPHEgSNbT5Dl2QqDNpA 提取码:fw39 复制这段内容后打开百度网盘手机App,操作更方便哦 D    Grid #inc ...

随机推荐

  1. 微服务全链路跟踪:springcloud集成jaeger

    微服务全链路跟踪:grpc集成zipkin 微服务全链路跟踪:grpc集成jaeger 微服务全链路跟踪:springcloud集成jaeger 微服务全链路跟踪:jaeger集成istio,并兼容u ...

  2. Buckingham-Reiner 方程和 Darby-Melson 经验方程

    由 Roni, et al. (2018), Woolley, et al. (2014), Yang, et al. (2017) 整理人便便的物理性质数据如下: 性质 值 密度 \((\text{ ...

  3. 关于腾讯会议pc端的使用教程

    一.首先先在官网下载pc端 下面是连接:腾讯会议_腾讯会议下载- 腾讯云 (tencent.com) 点击免费下载即可. 二.登录并创建会议 选择一种登录方式. 创建会议有快速会议和预定会议两种方式 ...

  4. spark 自定义 accumulator

    默认的accumulator 只是最简单的 int/float 有时候我需要一个map来作为accumulator 这样,就可以处理 <string, int>类型的计数了. 此外我还需要 ...

  5. 神经网络之卷积篇:详解卷积神经网络示例(Convolutional neural network example)

    详解卷积神经网络示例 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片,想做手写体数字识别.32×32×3的RGB图片中含有某个数字,比如7,想识别它是从0-9这10个数字中的哪一 ...

  6. 如何将图片转换为向量?(通过DashScope API调用)

    本文介绍如何通过模型服务灵积DashScope将 图片转换为向量 ,并入库至向量检索服务DashVector中进行向量检索. 模型服务灵积DashScope,通过灵活.易用的模型API服务,让各种模态 ...

  7. 反问面试官3个ThreadLocal的问题

    ThreadLocal,一个Java人面试绕不开的话题,我也很奇怪为什么那些面试官很喜欢问这个,也不知道他们自己有没有搞清楚. 接下来,我想先说说ThreadLocal的用法和使用场景,然后反问面试官 ...

  8. SpringBoot 集成 LDAP

    LDAP协议具体是什么可以自行查看,简单来说就是单点登录的一种实现方式 LDAP只是一种协议,实现的有 openLDAP ,Microsoft active directory 等 openLDAP部 ...

  9. war3辅助代码及运行方式

    打开VS2019 点这个 自动生成这么一堆代码,全删了,就剩这些就行 然后点这里 然后向CPP里粘贴以下代码 #include "tlhelp32.h" HANDLE hwnd = ...

  10. map&unordered_map<key,value>key使用自定义类的要求

    std::unordered_map 的键要求: std::unordered_map 是基于哈希表的数据结构. 它要求键类型必须支持哈希计算,也就是必须有对应的 std::hash 函数. 另外,键 ...