【ACM学习】CSDN周赛第7期
创始人
2024-01-17 14:36:15

文章目录

  • 奇偶排序
    • 问题
    • 题解
  • 小艺照镜子
    • 问题
    • 题解
    • 相关题目
      • 题解
  • 交换后的or
    • 问题
    • 题解
  • 去除整数(不讲)
    • 题目
    • 题解
  • 一些建议
  • 参考

奇偶排序

问题

给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数

题解

毕竟简单的方法就是先把奇数输出完,最后把偶数输出完,而不用考虑在数组里进行重组。

#include 
using namespace std;
int main()
{int n;int a[1001];cin >> n;for (int i = 0; i <= n - 1; i++){cin >> a[i];if (a[i] % 2 != 0)cout << a[i] << " "; //先输出奇数}for (int i = 0; i <= n - 1; i++){if (a[i] % 2 == 0)cout << a[i] << " "; //再输出偶数}return 0;
}

小艺照镜子

问题

已知字符串str。 输出字符串str中最长回文串的长度。

相关最长回文子串题目

题解

通过二维数组进行动态规划,dp[i][j]表示从第i个位置到第j个位置的字符串是否回文,若dp[i][j]=1则表示回文,dp[i][j]=0则表示不回文。

dp[i][j]是否为1,则是通过dp[i+1][j-1]是否为1来确定的。
当i=j时,表示一个位置的字符,同一个字符当然是相等的,则dp[i][j]=1。
而当i和j相邻时,则判断str[i]是否等于str[j]即可判断dp[i][j]是否为1。

所以转移方程是:
dp[i][j]=dp[i+1][j−1]dp[i][j]=dp[i+1][j-1] dp[i][j]=dp[i+1][j−1]

核心代码:

class Solution {
public:string longestPalindrome(string s) {int n=s.size();vector>dp(n,vector(n,0));int maxx=0;for(int j=0;jfor(int i=0;i<=j;i++){if(s[i]==s[j]){if(j-i==1||i==j){dp[i][j]=1;}elsedp[i][j]=dp[i+1][j-1];}if(dp[i][j]==1&&j-i+1>maxx){maxx=j-i+1;}}}return maxx;}
};

相关题目

题解

class Solution {
public:string longestPalindrome(string s) {int n=s.size();string a(s);vector>dp(n,vector(n,0));int maxx=0;int begin=0;for(int j=0;jfor(int i=0;i<=j;i++){if(s[i]==s[j]){if(j-i==1||i==j){dp[i][j]=1;}elsedp[i][j]=dp[i+1][j-1];}if(dp[i][j]==1&&j-i+1>maxx){maxx=j-i+1;begin=i;}}}// return maxx;return a.substr(begin,maxx);}
};

交换后的or

问题

给定两组长度为n的二进制串,请问有多少种方法在第一个串中交换两个不同位置上的数字,使得这两个二进制串“或”的结果发生改变?

题解

由于交换导致的或关系改变只会涉及交换的4个数(即str1的左边,右边,str2的左边、右边),但str1的左边和str2的左边或关系是一个整体,所以也可以说只会涉及到两个整体。

我们使用二进制就可以表示位于同一个位置的不同串了,如第i个位置的10表示str1[i]=1,str2[i]=0,而一共有4种可能,故我们使用4个单位的数组存放。

具体细节和讲解在注释里讲了。

#include 
#include 
using namespace std;
typedef long long LL;
LL solution(int n, std::string str1, std::string str2){std::vector ctr(4);for(int i = 0; i < n; ++i) {                           //     2  2int msk = (str1[i] == '1') << 1 | (str2[i] == '1');//00  01 10 11  = 0 1 2 3 ++ctr[msk];}LL result = 0;for(int i = 0; i < 4; ++i)for(int j = i + 1; j < 4; ++j) {if((i >> 1) == (j >> 1))//若str1的前一个数(i)和后一个数(j)一样,则无论怎么换位置都不会改变值continue;//>>1表示提取str1的数,&1表示提取str2的数,其余同理(i表示前一个数,j表示后一个数)int d0 = ((i >> 1) | (i & 1)) ^ ((j >> 1) | (i & 1));//表示str1的后一个数(j)能否改变str2的前一个(i)数的或关系,若能改变即右边的数和下面左边的数或关系与改变位置之前的或关系不一样(d0=1),则表示可以改变int d1 = ((j >> 1) | (j & 1)) ^ ((i >> 1) | (j & 1));//表示str1的前一个数(i)能否改变str2的后一个(j)数的或关系if(d0 || d1)result += (LL)ctr[i] * ctr[j];//ctr[]存放着有多少个类型不同的数,若有交换,则一共有str[i]*str[j]种}return result;
}
int main() {int n;std::string str1;std::string str2;std::cin>>n;std::cin>>str1;std::cin>>str2;LL result = solution(n, str1, str2);std::cout<

去除整数(不讲)

题目

已知存在集合A包含n个整数,从1到n。 存在m个整数a[1…m]。 在集合A中去除这m个整数的的倍数。 输出集合中包含的元素的个数。

题解

容斥原理经典题
注意下最小公倍数超过有符号 32 位整型数的情况

这题有点忘记了,虽然感觉挺奇怪的,因为如果m中包含1,那么集合A就完全被去除了,这一点可能是因为我忘记题目样例是怎样的了,因为没有竞赛回顾的oj平台,有点难受。。。

附上大佬的代码

int solution(int n, int m, std::vector& vec){typedef long long LL;int result = 0;for(int i = 0; i < (1 << m); ++i) {//1<if((~i >> j) & 1)continue;sgn = -sgn;lcm = lcm / std::__gcd(lcm, (LL)vec[j]) * vec[j];}if(lcm <= n)result += sgn * (n / lcm);}return result;
}

一些建议

由于是第一次在CSDN打竞赛,所以对于平台很多东西都不是很懂,但有一点想吐槽一下,感觉回顾错题的时候挺不方便的,希望CSDN能够开一个OJ平台能够重新做一下之前的题,并且建议评测报告可以把数据样例附上不然都不知道自己做的对不对,而且论坛里也有不少写着周赛题解质量参差不齐,甚至答案都是错的,误导了许多人。。。虽然本人的题解也不一定是对的,但至少会有些思路(大概).

对了,其实我一直不知道平台oj的检测复制粘贴有什么意义,毕竟已经有跳出网页检测了,有时候不小心打错了很多字,,然后又不想再敲一遍就自然地复制粘贴(自己的代码),结果就被检测了,而且平台oj敲得也不舒服(如果有代码补全就更好了!)

希望平台能够看到~

参考

http://lihuaxi.xjx100.cn/news/100248.html

参考文献的思路挺好的,就是参考的网站乱码看的难受

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
怎么样消灭臭虫 臭虫用什么药消... 奔奔虫控|被吸血臭虫骚扰的滋味,你体会过吗?相信被臭虫骚扰过的人都不想再体验一次了吧?那么臭虫应该怎...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
苁蓉的食用方法 鲜苁蓉的吃法有... 肉苁蓉号称“温而不热,补而不峻,暖而不燥,滑而不泄,故有从容之名。”历来也是传统药食同源的滋补佳品。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...