Codeforces Round #733 (Div. 1 + Div. 2, based on VK Cup 2021 - Elimination (Engine))
A Binary Decimal
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#define inf 0x7fffffff
#define ll long long
#define int long long
//#define double long double
#define re int
#define void inline void
#define eps 1e-8
//#define mod 1e9+7
#define ls(p) p<<1
#define rs(p) p<<1|1
#define pi acos(-1.0)
#define pb push_back
#define P pair < int , int >
#define mk make_pair
using namespace std;
const int mod=998244353;
const int M=1e9+1;
const int N=2e5+5;
int n,m;
int a[N],b[N];
void solve()
{
int ans=1;
cin>>n;
while(n)
{
ans=max(ans,n%10);
n/=10;
}
cout<<ans<<endl;
}
signed main()
{
int T=1;
cin>>T;
for(int index=1;index<=T;index++)
{
// printf("Case #%lld: ",index);
solve();
// puts("");
}
return 0;
}
/*
1
3
1 1 1
*/
B. Putting Plates
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#define inf 0x7fffffff
#define ll long long
#define int long long
//#define double long double
#define re int
#define void inline void
#define eps 1e-8
//#define mod 1e9+7
#define ls(p) p<<1
#define rs(p) p<<1|1
#define pi acos(-1.0)
#define pb push_back
#define P pair < int , int >
#define mk make_pair
using namespace std;
const int mod=998244353;
const int M=1e9+1;
const int N=2e5+5;
int n,m;
int a[55][55];
void solve()
{
cin>>n>>m;
for(re i=1;i<=n;i++) for(re j=1;j<=m;j++) a[i][j]=0;
int x=1,y=1;
while(y<=m) a[x][y]=1,y+=2;
x=1,y=m;
if(a[1][m]||a[1][m-1]) x=3;
while(x<n) a[x][y]=1,x+=2;
x=3,y=1;
while(x<n) a[x][y]=1,x+=2;
x=n,y=1;
int cnt=0,op=0;
if(a[n][1]||a[n-1][1]) cnt=2;
if(a[n][m]||a[n-1][m]) op=2;
y+=cnt;
while(y<=m-op) a[x][y]=1,y+=2;
for(re i=1;i<=n;i++,puts("")) for(re j=1;j<=m;j++) printf("%lld",a[i][j]);
puts("");
}
signed main()
{
int T=1;
cin>>T;
for(int index=1;index<=T;index++)
{
// printf("Case #%lld: ",index);
solve();
// puts("");
}
return 0;
}
/*
1
3
1 1 1
*/
C. Pursuit
a数组要保证不下降
b数组要保证不上升
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#define inf 0x7fffffff
#define ll long long
#define int long long
//#define double long double
#define re int
#define void inline void
#define eps 1e-8
//#define mod 1e9+7
#define ls(p) p<<1
#define rs(p) p<<1|1
#define pi acos(-1.0)
#define pb push_back
#define P pair < int , int >
#define mk make_pair
using namespace std;
const int mod=998244353;
const int M=1e9+1;
const int N=2e5+5;
int n,m;
int a[N],b[N],sum1[N],sum2[N];
bool cmp(int x,int y)
{
return x>y;
}
void solve()
{
int s1=0,s2=0,ans=0,cnt=0;
cin>>n;m=n-n/4;
cnt=ans=n;
for(re i=1;i<=n;i++) scanf("%lld",&a[i]);sort(a+1,a+n+1);
for(re i=1;i<=n;i++) scanf("%lld",&b[i]);sort(b+1,b+n+1,cmp);
for(re i=1;i<=n;i++) sum1[i]=sum1[i-1]+a[i],sum2[i]=sum2[i-1]+b[i];
for(re i=n+1;i<=n*2;i++) sum1[i]=sum1[i-1]+100,sum2[i]=sum2[i-1];
int res=ans-ans/4;
int x=sum1[ans]-sum1[ans-res];
int y=sum2[res];
// cout<<x<<" "<<y<<endl;
while(x<y)
{
ans++;
res=ans-ans/4;
x=sum1[ans]-sum1[ans-res];
y=sum2[res];
cnt=ans;
if(x>=y) break;
}
cout<<cnt-n<<endl;
}
signed main()
{
int T=1;
cin>>T;
for(int index=1;index<=T;index++)
{
// printf("Case #%lld: ",index);
solve();
// puts("");
}
return 0;
}
/*
1
3
1 1 1
*/
D. Secret Santa
简单说下思路,先把a数组copy给b数组,然后记录每个元素出现的个数
然后在想重复的替换,考虑用队列维护没有出现的数字
如果发现某数重复两次以上,在队列中找一个与下标不同的数,如果找不到,则在下标大于当前下标的数中找一个与该数相同的数
即 j>i,b[i]=b[j]
然后将b[j]=i,相当于交换吧b[i],b[j]
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#define inf 0x7fffffff
//#define ll long long
//#define int long long
//#define double long double
#define re register int
#define void inline void
#define eps 1e-8
//#define mod 1e9+7
#define ls(p) p<<1
#define rs(p) p<<1|1
#define pi acos(-1.0)
#define pb push_back
#define P pair < int , int >
#define mk make_pair
using namespace std;
const int mod=1e9+7;
const int M=1e8+5;
const int N=5e5+5;//?????????? 4e8
int n,a[N],b[N];
vector < int > c[N];
void solve()
{
int cnt=0;
map < int , int > mp;
queue < int > q;
cin>>n;
for(re i=0;i<=n;i++) c[i].clear();
for(re i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i],mp[a[i]]++,c[a[i]].pb(i);
for(re i=1;i<=n;i++) if(!mp[i]) q.push(i);
for(re i=n;i>=1;i--)
{
if(mp[b[i]]<=1) continue;
int x=q.front();q.pop();
while(x==i&&q.size())
{
q.push(x);
x=q.front();q.pop();
}
mp[b[i]]--;
if(x==i)
{
int sz=c[b[i]].size();
for(re j=0;j<sz;j++)
{
int pos=c[b[i]][j];
if(b[pos]!=b[i]||i==pos) continue;
else
{
b[i]=x;
swap(b[pos],b[i]);
break;
}
}
}
else b[i]=x;
}
for(re i=1;i<=n;i++) if(a[i]==b[i]) cnt++;
cout<<cnt<<endl;
for(re i=1;i<=n;i++) printf("%d ",b[i]);
puts("");
}
signed main()
{
int T=1;
cin>>T;
for(int index=1;index<=T;index++)
{
solve();
// puts("");
}
return 0;
}
/*
4 5
1 2
1 3
1 4
2 3
3 4
*/