C. Removing Smallest Multiples - 贪心+思维

C. Removing Smallest Multiples - 贪心+思维_第1张图片

 C. Removing Smallest Multiples - 贪心+思维_第2张图片

分析:

        首先对于k,可以一直删除k的倍数,直到遇到1, 可以贪心从小到大枚举每一个数,统计删去所有0所在位置时的总代价。

代码:

#include 

using namespace std;

typedef long long ll;
typedef pair pii;

int main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);

	int _;
	cin>>_;
	while(_--)
	{
		int n;
		cin>>n;
		string s;
		cin>>s;
		ll ans=0;
		unordered_map m;
		for(int i=1;i<=n;i++)
		{
			for(int j=i;j<=n;j+=i)
			{
				if(m[j-1]) continue;
				if(s[j-1]=='0')
				{
					ans+=i;
					m[j-1]=1;
				}
				else break;
			}
		}
		cout<

你可能感兴趣的:(算法,c++,思维)