Codeforces Round #733 (Div. 1 + Div. 2, based on VK Cup 2021 - Elimination (Engine))

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
 
*/ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值