A - What month is it?
题面:

水题一道,直接相加模 121212 就对了。
代码:
#include<bits/stdc++.h>
#define int long long
#define code using
#define by namespace
#define plh std
code by plh;
int x,y;
signed main()
{
cin>>x>>y;
cout<<((x+y)%12==0?12:(x+y)%12);
return 0;
}
B - Most Minority
题面:

翻译:

一道很水的模拟题,直接模拟每一次投票和得分就好了。
代码:
#include<bits/stdc++.h>
#define int long long
#define code using
#define by namespace
#define plh std
code by plh;
int n,m,a[106];
char c[106][106];
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>c[i][j];
}
}
for(int i=1;i<=m;i++)
{
int sum1=0,sum0=0;
for(int j=1;j<=n;j++)
{
if(c[j][i]=='1')
{
sum1++;
}
else
{
sum0++;
}
}
if(sum1==0||sum0==0)
{
for(int j=1;j<=n;j++)
{
a[j]++;
}
}
else if(sum1>sum0)
{
for(int j=1;j<=n;j++)
{
if(c[j][i]=='0')
{
a[j]++;
}
}
}
else
{
for(int j=1;j<=n;j++)
{
if(c[j][i]=='1')
{
a[j]++;
}
}
}
}
int mx=0;
vector<int>id;
for(int i=1;i<=n;i++)
{
if(a[i]>mx)
{
id.clear();
id.push_back(i);
mx=a[i];
}
else if(a[i]==mx)
{
id.push_back(i);
}
}
for(auto i:id)
{
cout<<i<<" ";
}
return 0;
}
C - Sum of Min Query
题面:

这题看上去是个暴力,实际上就是个预处理。
首先先算出当前的答案,然后对于每一次操作,都判断新的这个值对原答案是否会造成影响(也就是是否比原本的最小值还要小),然后再根据结果处理就对了。
代码:
#include<bits/stdc++.h>
#define int long long
#define code using
#define by namespace
#define plh std
code by plh;
int n,q,a[200006],b[200006];
signed main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
int ans=0;
for(int i=1;i<=n;i++)
{
ans+=min(a[i],b[i]);
}
while(q--)
{
char c;
int x,y;
cin>>c;
cin>>x>>y;
if(c=='A')
{
if(y>=b[x])
{
if(a[x]<b[x])
{
ans+=(b[x]-a[x]);
}
}
else
{
if(a[x]<b[x])
{
ans-=(a[x]-y);
}
else
{
ans-=(b[x]-y);
}
}
a[x]=y;
}
else
{
if(y>=a[x])
{
if(b[x]<a[x])
{
ans+=(a[x]-b[x]);
}
}
else
{
if(b[x]<a[x])
{
ans-=(b[x]-y);
}
else
{
ans-=(a[x]-y);
}
}
b[x]=y;
}
cout<<ans<<'\n';
}
return 0;
}
D - Toggle Maze
题面:

翻译:

手动说明一下:. 是空单元格,? 是可以切换开关门的单元格。
然后这题明显是一个 bfs,那对于开门和关门操作,实际上就像是对一个数异或 1 或 0,那么我们就可以把两种门一种设成 1,一种设成 0,然后每转换一次,就是异或一次 1。
因此我们要在 queue 里面写四个参数:当前的横坐标、当前的纵坐标、当前所走的步数、当前有没有把开门和关门颠倒。然后直接跑 bfs最短路就行了。注意:这里的 vis 要写成三维:当前的横坐标、当前的纵坐标、当前有没有把开关门颠倒过来,因为就算到了同一个点,图也可能不一样了,所以要多加一维。
代码:
#include<bits/stdc++.h>
#define int long long
#define code using
#define by namespace
#define plh std
code by plh;
struct node{
int x,y,s,d;
};
int n,m,stx,sty,vis[506][506][2],mp[506][506],fx[4][2]={
1,0,0,-1,-1,0,0,1};
queue<node>q;
bool fl=false;
void bfs()
{
q.push({
stx,sty,0,
-1

最低0.47元/天 解锁文章
657

被折叠的 条评论
为什么被折叠?



