Mail.Ru Cup 2018 Round 1 virtual participate记
分类:
IT文章
•
2022-07-26 22:40:19
因为睡过了只好vp。
A:阅读理解。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
#define N
int x,y,z,t1,t2,t3;
int main()
{
cin>>x>>y>>z>>t1>>t2>>t3;
if (abs(y-x)*t1>=t3*3+t2*(abs(x-z)+abs(y-x))) cout<<"YES";
else cout<<"NO";
return 0;
}
View Code
B:一个数可以作为mex当且仅当所有比它小的自然数都已出现。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
#define N 100010
int n,a[N],mx;
int main()
{
n=read();
for (int i=1;i<=n;i++) a[i]=read();
mx=-1;
for (int i=1;i<=n;i++)
{
if (a[i]>mx+1) {cout<<i;return 0;}
mx=max(mx,a[i]);
}
cout<<-1;
return 0;
}
View Code
C:li=ri=0的人一定是最大值,给他们记录答案后将其去掉并更新其他人的li和ri即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
#define N 1010
int n,a[N],b[N],ans[N],cnt=0;
int main()
{
n=read();
for (int i=1;i<=n;i++) a[i]=read();
for (int i=1;i<=n;i++) b[i]=read();
for (int i=1;i<=n;i++)
{
bool flag=0;
for (int j=1;j<=n;j++)
if (a[j]==0&&b[j]==0) flag=1,cnt++,ans[j]=n-i+1,a[j]=b[j]=n+2;
if (!flag) {cout<<"NO";return 0;}
if (cnt==n) break;
int tot=0;
for (int j=1;j<=n;j++)
if (a[j]==n+2&&b[j]==n+2) tot++;
else if (a[j]<tot) {cout<<"NO";return 0;}
else a[j]-=tot;
tot=0;
for (int j=n;j>=1;j--)
if (a[j]==n+2&&b[j]==n+2) tot++;
else if (b[j]<tot) {cout<<"NO";return 0;}
else b[j]-=tot;
for (int j=1;j<=n;j++)
if (a[j]==n+2&&b[j]==n+2) a[j]=b[j]=n+1;
}
cout<<"YES
";
for (int i=1;i<=n;i++) cout<<ans[i]<<' ';
return 0;
}
View Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
#define N 200010
int n,m,a[N];
map<int,int> f;
long long ans;
int main()
{
n=read(),m=read();f[0]++;
for (int i=1;i<=n;i++)
{
a[i]=a[i-1]^read();
if (a[i]<(1<<m-1)) f[a[i]]++;
else f[((1<<m)-1)^a[i]]++;
}
for (int i=1;i<=n;i++) if (a[i]>=(1<<m-1)) a[i]^=((1<<m)-1);
ans=1ll*n*(n+1)>>1;
sort(a,a+n+1);int t=unique(a,a+n+1)-a-1;
for (int i=0;i<=t;i++)
{
int x=f[a[i]],p=x/2,q=(x+1)/2;
ans-=1ll*p*(p-1)/2,ans-=1ll*q*(q-1)/2;
}
cout<<ans;
return 0;
}