【ACM学习】CSDN周赛第7期
admin
2024-03-31 11:30:02
0

文章目录

  • 奇偶排序
    • 问题
    • 题解
  • 小艺照镜子
    • 问题
    • 题解
    • 相关题目
      • 题解
  • 交换后的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

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

相关内容

热门资讯

追觅业务调整,同步启动人员优化 6月28日消息,近日,追觅系各大业务单元(BU)正在收缩和调整,将旗下超过200个业务单元(BU)大...
阿根廷内阁首席部长因贪腐丑闻宣... 6月28日消息,深陷贪腐丑闻的阿根廷内阁首席部长曼努埃尔·阿多尔尼6月27日经由社交媒体宣布辞职。阿...
英格兰2比0战胜巴拿马 6月28日消息,北京时间6月28日,美加墨世界杯小组赛L组第三轮,巴拿马队对阵英格兰队,贝林厄姆、凯...
塞尔维亚总统武契奇:将在数周后... 6月28日消息,当地时间6月27日,塞尔维亚执政党前进党在首都贝尔格莱德市中心举行大型集会。塞尔维亚...
美国富人圈新宠:91岁老人输注... 武侠小说里,常常会出现有人为求长生而采补、换血的情节。而在近期,已经有机构试图在现代科学理论的指导下...
伊朗革命卫队威胁对美军基地发起... 6月28日消息,据伊朗媒体28日报道,伊朗伊斯兰革命卫队海军司令部发表声明称,美国对伊朗锡里克地区实...
黎真主党领导人谴责美以黎框架协... 6月27日消息,当地时间6月27日,黎巴嫩真主党领导人纳伊姆·卡西姆谴责了美国、以色列和黎巴嫩达成的...
雄安新区获批建设国家级知识产权... 6月27日消息,近日,国家知识产权局批复同意雄安新区开展国家级知识产权保护中心建设,未来面向新一代信...
欧盟回应特朗普关税威胁:坚决捍... 6月27日消息,美国总统特朗普6月26日威胁向对美企业征收数字服务税的欧洲国家施以报复性关税后,欧盟...
下周A股解禁市值逾1000亿元... 6月27日消息,据统计,下周(6月29日至7月3日),A股将有51家上市公司迎来限售股解禁。以个股最...