Codeforces Round #652 (Div. 2) 虚拟参赛及补题

A题,很简单,数学题,应该是4的倍数会满足两条边垂直。
B题,字符串操作的贪心题,读题要细致,注意还要最小化。所以最后一个删掉的得是1
具体看代码吧。

  • 思路。先处理后面的10,把除了第一个1以外的1全部删掉,这样就会剩下第一个1和后面的0,然后把0删掉,最后把1的位置改成0.
  • 代码
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define PII pair<int, int>
const int N = 15 + 10;
string a;
void solve()
{
    
    
	int n;
	cin >> n;
	cin >> a;
	int end;
	int len = a.length();
	for (int i = len - 1; i >= 0; i--)
	{
    
    
		if (a[i] == '0')
		{
    
    
			end = i;
			break;
		}
	}
	//cout<<end<<endl;
	int st;
	for (int i = 0; i < len; i++)
	{
    
    
		if (a[i] == '1')
		{
    
    
			st = i;
			break;
		}
	}
	//cout<<st<<endl;
	for (int i = end - 1; i >= 0; i--)
	{
    
    
		if (a[i] == '1' && i != st)
		{
    
    
			a.erase(i, 1);
		}
		else
		{
    
    
			continue;
		}
	}
	//cout<<a<<endl;
	for (int i = st + 1; i < a.length(); i++)
	{
    
    
		if (a[i] == '0')
		{
    
    
			a.erase(i, 1);
			i--;
		}
		else
			break;
		//cout<<a<<endl;
		a[st]='0';
	}
	cout << a << endl;
}

int main()
{
    
    
	int t;
	cin >> t;

	while (t--)
	{
    
    
		solve();
	}
}

C题

  • 思路
    第一个数组从大到小排序,第二个数组从小到大排序。因为细节,wa了一次。
    忘了更新指针了。
  • 代码
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define PII pair<int, int>
const int N = 2e5 + 10;
ll a[N];
bool cmp(int a,int b)
{
    
    
	return a>b;
}
ll K[N];
void solve()
{
    
    
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	for(int i=1;i<=k;i++)
	cin>>K[i];
	sort(a+1,a+1+n,cmp);
	sort(K+1,K+1+k);
	ll res=0;
	int z=k;
	for(int i=1;i<=k;i++)
	{
    
    
		res+=a[i];
	}
	for(int i=1;i<=k;i++)
	{
    
    
		if(K[i]==1)
		{
    
    
			res+=a[i];
			continue;
		}
		res+=a[z+K[i]-1];
		z+=K[i]-1;
	}
	cout<<res<<endl;
}

int main()
{
    
    
	int t;
	cin >> t;
	while (t--)
	{
    
    
		solve();
	}
}
  • 补题

D题
在这里插入图片描述

  • 题意
    自己看去吧。
  • 思路
    自己理解,在扩展的过程中,因为对称性的原因,所以2*dp【i-2】,中间一枝是dp[i-1];
    因为(手动模拟)扩展过程中,就会多出来一个claw。
    在这里插入图片描述
  • 代码
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define PII pair<int, int>
const int N = 2e6 + 10;
const ll mod = 1e9 + 7;
ll a[N];

ll dp[N];
void solve()
{
    
    
	int n;
	cin >> n;
	ll res;
	//if (n <= 100000)
		res = (dp[n] + mod) % mod;
	// else
	// {
    
    
	// 	for (int i = 100000; i <= n; i++)
	// 	{
    
    
	// 		dp[i] = (2 * dp[i - 2] + dp[i - 1]) % mod;
	// 		if (i % 3 == 0)
	// 			dp[i] = (dp[i] + 4) % mod;
	// 	}
	// 	res = (dp[n] + mod) % mod;
	// }
	cout << res << endl;
}

int main()
{
    
    
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t;
	cin >> t;
	dp[1] = dp[2] = 0;
	for (int i = 3; i <= N; i++)
	{
    
    
		dp[i] = (2 * dp[i - 2] + dp[i - 1]) % mod;
		if (i % 3 == 0)
			dp[i] = (dp[i] + 4) % mod;
	}
	while (t--)
	{
    
    

		solve();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_46264636/article/details/112770652
今日推荐