CSDN第17周周赛题解

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSDN第17周周赛题解相关的知识,希望对你有一定的参考价值。

CSDN第17周周赛题解

1、题目名称:判断胜负

已知两个字符串A,B。 连续进行读入n次。 每次读入的字符串都为A|B。 输出读入次数最多的字符串。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define VI vector<int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define ios ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);

template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;

int main()
int t;cin>>t;
map<string,int>mp;
while(t--)
string s;cin>>s;
mp[s]++;

string ans;
int mx=0,cnt=0;
for(auto [x,y]:mp)
if(y>mx)
mx=y;
ans=x;
cnt=1;

else if(y==mx)
cnt++;


if(cnt!=1) puts("dogfall");
else cout<<ans;
return 0;


2、题目名称:买铅笔

P老师需要去商店买n支铅笔作为小朋友们参加编程比赛的礼物。她发现商店一共有 3 种包装的铅笔,不同包装内的铅笔数 量有可能不同,价格也有可能不同。为了公平起 见,P老师决定只买同一种包装的铅笔。 商店不允许将铅笔的包装拆开, 因此P老师可能需要购买超过 n 支铅笔才够给小朋 友们发礼物。 现在P老师想知道,在商店每种包装的数量都足够的情况 下,要买够至少 n 支铅笔最少需要花费多少钱。

#include <bits/stdc++.h>
using namespace std;
int n,x,y,s,minx=0x7fffffff;
int main()

scanf("%d",&n); //读入n
for (int i=1;i<=3;i++)

scanf("%d%d",&x,&y);
s=(n/x+(n%x!=0))*y; //当n不能整除x时,需要多买一包,此时布尔表达式的值为1,就是加上一包,用包数乘以
价格得到这种包装的价格
if (s<minx) minx=s; //如果s比min小,就更新min

printf("%d\\n",minx);
return 0;


3、题目名称:拯救爱情

小艺酱走到一个花之占卜店中。 店员小Q看到小艺酱可怜的样子,允许小艺酱免费占卜一次。 花瓣占卜: 1. 一瓣“在一 起”,一瓣“不在一起”;开始的花瓣表示“在一起”。 2. 直到最后一个花瓣落地游戏结束。 3. 可以选择多朵花,选择撕一 朵花就必须撕完。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define VI vector<int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);

template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;

ll a[N];
int main()
int n;
cin>>n;
ll s = 0;
rep(i,1,n)
cin>>a[i];
s+=a[i];

sort(a+1,a+n+1);
if(s%2)
cout<<s;
return 0;

else 
for(int i=1;i<=n;i++)
if(a[i]&1)
s-=a[i];
break;


if(s%2==0)
assert(1<0);
cout<<0<<'\\n';
return 0;

cout<<s;

return 0;


4、题目名称:拯救公主

在Flower Kingdom里,住着一位美丽的公主Ana,有一天Ana得了一种怪病,神医告知国王,在遥远的幽谷中有一种药 能治愈Ana, 但是神医只有一份不完整的地图,地图的描述如下: 该地图的共有3行,第一行有m列,m为奇数,第二行有m+1列,第三行有m+2列; 每一行用一个字符串表示,只有【两种字符】;‘.'表示草地,可以从它上面通过,‘’表示岩石,每一行最多一个‘’; 入口 在左上角,由于在对角线方向上,因此即使对角线两边都有岩石,但是缝隙较大,人可以通过,故人可以向八个方向行 走; 真实地图是由该地图的【每一行无限循环】得到的,这种神奇的药草就生长在第x行第y列的草地上,药草可能会在岩石上; 国王决定派遣勇敢的骑士David前去寻找拯救公主的解药; 现在聪明的你是否知道David能否找到该药?

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define VI vector<int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);

template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;

int col[4];
int pos[4];
char a[4][N];
int main()
int t;cin>>t;
while(t--)
int m;cin>>m;
int x,y;cin>>x>>y;
col[1] = m;
col[2]=m+1;
col[3]=m+2;
1.out 通过
2.out 通过
运行时间:
占用内存:18.539k
运行时间:
占用内存:18.543k
mst(pos,0);
rep(i,1,3)
scanf("%s",a[i]+1);
for(int j=1;j<=col[i];j++)
if(a[i][j]=='*')
pos[i]=j;
break;



int cnt =0;
for(int i=1;i<=3;i++)
if(pos[i]) cnt++;

if(cnt<3) cout<<'YES'<<'\\n';
else 
int mx = 0;
int cc = 0;
for(int i=1;i<=3;i++)
if(mx<col[i])
mx = col[i];
cc = i;


int ok =1;
// printf("%d %d %d\\n",pos[1],pos[2],pos[3]);
for(int i=pos[cc];i<=2e6;i+=mx)
if(i>y) break;
// printf("i=%d\\n",i);
// printf("%d %d %d\\n",(i-pos[1])%m==0,((i-pos[2]%(m+1)==0)),((i-pos[3])%(m+2)==0));
if((i-pos[1])%m==0 && ((i-pos[2])%(m+1)==0) && ((i-pos[3])%(m+2)==0) )
ok = 0;
break;


y%=col[x];
if(y>1e6) ok = 0;
if(y==0) y+=col[x];
if(a[x][y]=='*')
ok = 0;

if(ok) cout<<"YES"<<'\\n';
else cout<<"NO"<<'\\n';


return 0;

以上是关于CSDN第17周周赛题解的主要内容,如果未能解决你的问题,请参考以下文章

第十周周赛题解

第六周周赛题解

第六周周赛——AK机会不易得,好好把握题解(出自HDU5650,codeforces 616A,624A,659A,655A,658A)

第六周周赛——AK机会不易得,好好把握题解(出自HDU5650,codeforces 616A,624A,659A,655A,658A)

T^T周赛第一周周赛——欢迎16级的新同学

leetcode 185周周赛 字节专场