牛客链接

A

思路

掌握 x^0=x 这个性质就可以秒了

题解

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int t,n;
int k; int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>k;
cout<<k<<' '<<0<<endl;
return 0;
}

B

思路

按照题目意思模拟即可

题解

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int t,n;
int b[N];
int a[N]; int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=1;i<n;i++)b[i]=a[i]^a[i-1];
int ans=b[1];
for(int i=2;i<n;i++)ans=__gcd(ans,b[i]);
cout<<ans<<endl; return 0;
}

C

思路

猜结论,只要对角线放置就可以保证一次加2,又发现无论如何最后的sum之和都只会是偶数,于是猜测奇数的情况下无法构造,那么偶数只需要对角线摆放。

题解

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int t,n;
int k; int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
if(k%2==1)cout<<-1<<endl;
else
{
int x = k/2;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j&&i<x)cout<<1;
else cout<<0;
}
cout<<endl;
}
} return 0;
}

D

思路

有点小麻烦,但是不难想出怎么做,主要难在模拟上了,看卡里有4种情况需要考虑11,12,22,21,实际上只需要考虑11,12,22就行,如我代码所示,最后是由结果可以是由22222...121212...1111 三部分构成,所以只会出现11,12,22三种情况,然后就是计算结果的方式了,显然22在一起可以使n-1的基础上+1,所以看代码模拟即可

题解

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int t,n;
int k;
int cnt[3];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
cnt[x]++;
}
int xx = k-n+1; int minx=0;
if(cnt[1]+1>=cnt[2])minx = n-1;
else minx = n-1+(cnt[2]-cnt[1]-1); int maxx = cnt[1]+(cnt[2]-1)*2;
// cout<<minx<<' '<<maxx<<endl;
if(k<minx||k>maxx)cout<<-1<<endl;
else
{
for(int i=0;i<=xx;i++)
{
cout<<2<<' ';
cnt[2]--;
}
for(int i=0;i<cnt[2];i++)
{
cout<<1<<' '<<2<<' ';
cnt[1]--;
}
for(int i=0;i<cnt[1];i++)
{
cout<<1<<' ';
}
cout<<endl;
} return 0;
} // 10 15
// 1 2 1 2 2 2 2 2 2 2

E

思路

考虑每一个节点的的所有的邻居的每一个二进制位分别进行计算0和1的个数,当中心节点的第i个二进制位为0,那么此时要使得无进制的三个数字累加最后结果是1,显然就是一个邻居节点为0,一个邻居节点为1的情况,所以此时的所有可能就是$$cnt =cnt0*cnt1$$,如果说中心节点的第i个二进制位为1,那么次数要使得最后三个数字的累加结果是1,显然就是两个邻居节点同时是0,或者两个邻居节点同时是1,次数的计算方式就是$$ cnt = C2_{cnt0}+C2_{cnt1}$$,最后计算ans就是将第i位代表的十进制数字×cnt累加取模即可

题解

#include <bits/stdc++.h>
const int N = 2e5+10;
const int mod = 998244353 ;
typedef long long ll;
using namespace std;
int n,m;
ll ans=0;
vector<int>graph[N];
int w[N];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=0;i<m;i++)
{
int u,v;
cin>>u>>v;
graph[u].push_back(v);
graph[v].push_back(u);
}
for(int i=0;i<=30;i++)
{
ll xx = (1<<i);
ll cnt=0;
for(int j=1;j<=n;j++)
{
ll cnt0=0;
ll cnt1=0;
for(auto k:graph[j])
{
if((w[k]>>i)&1)cnt1++;
else cnt0++;
}
if((w[j]>>i)&1)
{
cnt = (cnt+(cnt0*(cnt0-1)/2)%mod + (cnt1*(cnt1-1)/2)%mod)%mod;
}
else
{
cnt = (cnt+cnt0*cnt1)%mod;
}
}
ll curans = (xx*cnt)%mod;
ans = (ans+curans)%mod;
}
cout<<ans<<endl;
return 0;
}

F

思路

动态规划求解,bool dp[i][j][k]表示前面i个数的最大公约数位j,此时的累加和为k是否成立,首先观察可知m的大小限制在1到50,所以我们可以考虑预处理1-50的约数,进入循环后,初始化dp和path数组,path数组用于保存每个节点的j,用于最后的有答案输出,那么接下来的部分看代码就能看懂了,三重循环遍历

题解

#include <bits/stdc++.h>
using namespace std;
const int N = 51;
const int MAX_X = 2501;
vector<int> divx[N];
bool dp[N][N][MAX_X];
int path[N][N][MAX_X];
int n,m,x;
void precom(int x)
{
for(int i=1;i<=x;i++)
{
for(int j=i;j<=x;j+=i)
{
divx[j].push_back(i);
}
}
} int main()
{
int t;
cin>>t;
precom(50);
while(t--)
{
cin>>n>>m>>x;
memset(dp,false,sizeof(dp));
memset(path,0,sizeof(path));
for(int i=1;i<=m;i++){if(i<=x)dp[1][i][i]=true;}
for(int i=1;i<n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=x;k++)
{
if(dp[i][j][k])
{
for(auto g:divx[j])
{
if(g+k<=x)
{
dp[i+1][g][g+k]=true;
path[i+1][g][g+k]=j;
}
}
}
}
}
}
int preg = -1;
for(int i=1;i<=m;i++)
{
if(dp[n][i][x])
{
preg=i;
break;
}
}
if(preg==-1)cout<<-1<<endl;
else
{
int curx=x;
int curg=preg;
vector<int>a(n+1);
for(int i=n;i>=1;i--)
{
a[i]=curg;
if(i>1)
{
preg = path[i][curg][curx];
curx = curx - curg;
curg = preg;
}
}
for(int i=1;i<=n;i++)cout<<a[i]<<' ';
cout<<endl;
}
} }

牛客周赛 round105 (A-F)题解的更多相关文章

  1. 牛客练习赛60 A—F题解(缺E题)

    本蒟蒻这次只过了三题 赛后学习了一下出题人巨佬的标码(码风比我好多了 贴的代码有些是仿出题人)现在将自己的理解写下来与大家分享 A这个题一分析就是每个数字都会与所有数字&一下 (a&a ...

  2. 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)

    链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...

  3. 牛客网练习赛23 F 托米的游戏

    链接:https://www.nowcoder.com/acm/contest/156/F 来源:牛客网 题目描述 题目背景编不下去了 托米有一棵有根树 T, 树根为1,每轮他会在剩下的子树中等概率一 ...

  4. 牛客小白赛1 F题三视图

    链接:https://www.nowcoder.com/acm/contest/85/F来源:牛客网 题目描述 Etéreo 拿出家里的许多的立方体积木,堆成了一个三维空间中的模型.既然你高考选了技术 ...

  5. 牛客小白月赛3 F 异或【区间交集】

    链接:https://www.nowcoder.com/acm/contest/87/F 来源:牛客网 题目描述 Cwbc想测试一下他的加密协议,以便防止其他人偷看他给XHRlyb的信. Cwbc提出 ...

  6. 牛客网 牛客小白月赛1 F.三视图

    F.三视图   链接:https://www.nowcoder.com/acm/contest/85/F来源:牛客网     这个题自己想一下三维的,正视图和左视图中y轴为行数,x轴和z轴是列数,因为 ...

  7. 牛客OI测试赛 F 子序列 组合数学 欧拉降幂公式模板

    链接:https://www.nowcoder.com/acm/contest/181/F来源:牛客网 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘 ...

  8. 牛客小白月赛6 F 发电 树状数组单点更新 求区间乘积 模板

    链接:https://www.nowcoder.com/acm/contest/136/F来源:牛客网  HA实验是一个生产.提炼“神力水晶”的秘密军事基地,神力水晶可以让机器的工作效率成倍提升.   ...

  9. 牛客小白月赛16 F 小石的妹子 (线段树)

    链接:https://ac.nowcoder.com/acm/contest/949/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  10. 牛客周赛11TG B-弹钢琴

    链接:https://ac.nowcoder.com/acm/contest/941/B来源:牛客网 题目描述 春希想听和纱弹钢琴! 为了阻止异变的发生,Pi将钢琴魔改了 钢琴上有 N 个键,每个键有 ...

随机推荐

  1. Kubernetes数据存储-本地存储

    简单存储 EmptyDir EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录. EmptyDir是在Pod被分配到Node时创建的,它的初始内容为空,并且无须 ...

  2. 偶斐波那契数列性质与欧拉计划第2题 Properties of Even Fibonacci numbers and Project Euler problems 2

    Problem 2 Even Fibonacci numbers Each new term in the Fibonacci sequence is generated by adding the ...

  3. 新人如何入门学习 STM32?

    作为一个在嵌入式领域摸爬滚打了近10年的老兵,看到这个问题时我的思绪瞬间回到了当年那个懵懂的自己.说实话,2014年那个夏天,24岁的我刚从机械专业毕业却被调剂到了厦门某马的电子部门,第一次听到&qu ...

  4. C# winform 打开设计时,也会执行编写的代码,

    if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")//判断是否为设计时 { re ...

  5. C# Avalonia动态加载xaml和cs实例

    扩展请参考 https://www.cnblogs.com/dalgleish/p/18972924 NonCompiledXaml.axaml代码 <Window xmlns="ht ...

  6. Eclipse WindowBuilder(SWT)插件安装及初次使用记录(萌新)

    Eclipse WindowBuilder(SWT)插件安装及初次使用(萌新) 一.插件安装 (有VPN的挂VPN,服务器在外网更新下载比较慢) 1.首先更新到最新版本 点击Help,点击check ...

  7. ETL过程中数据精度不准确问题

    最近一位同学在使用Restcloud ETL产品做数据集成,出现数据传输到目标库表后,数据精度不准确问题. 场景为:从oracle源表数据 格式为:number(21,6)将数据同步到mysql目标表 ...

  8. SciTech-BigDataAIML-Measurement: Euclidian Distance + Manhattan Distance + Area面积 + Density密度 + KLD(KL散度):测度比较"两Distribution(概率分布)"的Similarity(接近度)

    Measurement 测度 Euclidian Distance(欧几理得距离) \(\large \begin{array}{rl} \\ EuDistance(Point_1, Point_2) ...

  9. POLIR-Management-TYPES of decisions{Structured(routine+familiar)Problems: Programmed Decisions, Unstructured(new+unusual)Problems: Nonprogrammed Decisions}

    In a very simple sense, the problems managers encounter can be classified as: routine and familiar; ...

  10. You deserve it. 和 You are worth it. 有什么区别(英语, 美国)?

    英语 (美国) You deserve it. 和 You are worth it. 有什么区别? Skiluvem, 2020年10月22日, 英语 (美国) "You deserve ...