首页 > 其他分享 >Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)

Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)

时间:2023-11-13 16:01:29浏览次数:42  
标签:AtCoder Beginner Contest int ll long solve ans using

Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)

A. Not Too Hard

题意:

将给定的数列\(a\)中数值小于\(x\)的数累加。

解题思路:

模拟。

代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

void solve()
{
	int n,x;
	cin >> n >> x;
	vector<int> s(n + 1);
	ll ans = 0;
	for(int i = 1;i<=n;i++)
	{
		cin >> s[i];
		if(s[i] <= x)
		{
			ans += s[i];
		}
	}
	cout<< ans;
}

int main()
{
	int t = 1;
//	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

B. 11/11

题意:

设定一年的月数和各个月的天数,看一年中有多少天第\(i\)月第\(j\)号,的\(i,j\)是由一个数字组成。例如1月11日、2月2日。

解题思路:

暴力。找到由相同数字组成的月份,然后再该月份中找相同数字组成的日期。

代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

void solve()
{
	int n;
	cin >> n;
	vector<int> d(n + 1);
	for(int i = 1;i<=n;i++)
	{
		cin >> d[i];
	}
	ll cnt = 0;
	for(int i = 1;i<=n;i++)
	{
		bool f = true;
		int t = i;
		int z = i % 10;
		while(t)
		{
			int y = t % 10;
			t /= 10;
			if(y != z)
			{
				f = false;
				break;
			}
		}
		if(!f)
		{
			continue;
		}
		for(int j = 1;j<=d[i];j++)
		{
			int x = j;
			bool f = true;
			while(x)
			{
				int t = x % 10;
				x /= 10;
				if(t != z)
				{
					f = false;
					break;
				}
			}
			if(f)
			{
//				cout << i <<' ';
//				cout << j <<endl;
				cnt ++;
			}
		}
	}
	cout << cnt;
}

int main()
{
	int t = 1;
//	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

C Consecutive

题意:

给定一个字符串,有多组询问,每组询问为从\(l_i\)到\(r_i\)之间有多少个两两连续的字符短串。

例如\(aaa\),这个字符中就有两个字符短串。\(aabcc\)中有两个\(aa,cc\)。

解题思路:

前缀和。

代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

void solve()
{
	int n,q;
	cin >> n >> q;
	string s;
	cin >> s;
	s = ' ' + s;
	vector<int> d(n + 10);
	for(int i = 2;i<=n;i++)
	{
		if(s[i] == s[i-1])
		{
			d[i] = 1;
		}
		d[i] += d[i-1];
//		cout << i << "fdsafasdfasd" << d[i]<<endl;
	}

	while(q--)
	{
		int l,r;
		cin >> l >> r;
		ll ans = 0;
		cout << d[r] - d[l] << endl;
	}
}

int main()
{
	int t = 1;
//	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

D. Take ABC

题意:

给定一个字符串,从左往右看,遇到\(ABC\)就删,然后从左往右看,直到所有\(ABC\)删完。

解题思路:

栈。从左到右找到一个删一个。

代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

void solve()
{
	string s;
	cin >> s;
	string ans;
	for(auto c : s)
	{
		ans += c;
		if(ans.size() >= 3 && ans.substr(ans.size()-3,3) == "ABC")
		{
			ans.pop_back();
			ans.pop_back();
			ans.pop_back();
		}
	}
	cout << ans << endl;
}

int main()
{
	int t = 1;
//	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

E. Modulo MST

题意:

给一个图,求最小生成树。此处最小指的是树边权求和后模\(k\)后最小。

解题思路:

数据量小。暴力枚举所有构造的可行方案。取最小值即可。

简单图这里最多\(26\)条边,我们最多从中取\(7\)条,\(C_{26}^7 = 657800\) 。

注意点:

  • 树中边数为点数减一
  • 用排列枚举组合数:\(C_a^b\)。我们开一个长度为\(a\)的数组,最后\(b\)个位置设为\(1\),表示取,其余位置设为\(0\),表示不取。\(next_permutation\)即可。
  • 并查集合并时,让序号大的合并到小的上,最后根节点为1。

代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

struct edge
{
	ll a,b,w;
	bool operator < (edge t)
	{
		return w < t.w;
	}
	
};

void solve()
{
	ll n,m,k;
	cin >> n >> m >>k;
	vector<edge> e(m + 1);
	for(int i = 1;i<=m;i++)
	{
		cin >> e[i].a >> e[i].b >> e[i].w;
	}
	vector<ll> p(n + 1);
	auto find =[&](auto self,int u) -> int
	{
		if(u != p[u])
		{
			p[u] = self(self,p[u]);
		}
		return p[u];
	};
	auto merge =[&](int a,int b) 
	{
		int pa = find(find,a);
		int pb = find(find,b);
		if(pa == pb)
		{
			return;
		}
		if(pa < pb)
		{
			swap(pa,pb);
		}
		p[pa] = pb;
	};
	vector<int> a(m + 1);
	for(int i = m - n + 2;i <= m;i++)
	{
		a[i] = 1;
//		cout << i << ' ' << a[i] << endl;
	}
	ll ans = 1e18;
	auto check =[&]()
	{
		for(int i = 1;i<=n;i++)
		{
			// ÕâÀïÒ»¶¨ÊÇfind(p[i])
			if(find(find,p[i]) != 1)
			{
				return false;
			}
		}
		return true;
	};
	do{
		for(int i = 1;i<=n;i++)
		{
			p[i] = i;
		}
		ll res = 0;
		for(int i = 1;i<=m;i++)
		{
			if(a[i])
			{
				res = (res + e[i].w) % k;
				merge(e[i].a,e[i].b);
			}
		}
		if(check())
		{
			ans = min(ans,res);
		}
	}while(next_permutation(a.begin() + 1,a.end()));
	cout << ans << endl;
}

int main()
{
	int t = 1;
//	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

标签:AtCoder,Beginner,Contest,int,ll,long,solve,ans,using
From: https://www.cnblogs.com/value0/p/17829354.html

相关文章

  • AtCoder Beginner Contest 328
    A-NotTooHard(abc328A)题目大意给定\(n\)个数字和一个数\(x\)。问不大于\(x\)的数的和。解题思路按找要求累计符合条件的数的和即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdi......
  • AtCoder Beginner Contest 328
    A傻逼题。B傻逼题C傻逼题D不难发现,每次添加一个字符,如果可以当前的答案组成ABC就删。然后模拟即可。E两种方法。二进制枚举使用了哪些边。可以发现有用的状态只有\(\binom{m}{n-1}\),上限大概\(10^5\),剩余无用状态过了就行。复杂度\(O(m2^m)\),但是跑的特别不满。......
  • The 2023 ICPC Nanjing Regional Contest G,F
    G.背包我们要是选一个集合出来并且免除k个宝石的话我们一定是选最贵的k个宝石免费这样我们的做法就是对wi排序然后前面的做背包后面直接贪心选vi最大的k个这样是一定包含了最优解的当然你可以用二分bit也可以直接维护另一个dpintn,tr1[200010],tr2[200010],idx;map<i......
  • Kattis - A Complex Problem (The 2023 ICPC Rocky Mountain Regional Contest)
    IntroThiswasoneoftheproblemsIdidn'tdoduringtheregionalcontest.Oneofmyteammatessolvedit.ObservationTherearefewthingstonote.Firsttypeofnotation:subsetmeansthatA$\subset$B,buttherecanbecasesthatsubsetforms......
  • AtCoder Beginner Contest(abc) 322
    B-PrefixandSuffix难度:⭐题目大意给定两个字符串t和s,如果t是s的前缀则输出1,如果是后缀则输出2,如果都是则输出0,都不是则输出3;解题思路暴力即可;神秘代码#include<bits/stdc++.h>#defineintl1ngl1ng#defineIOSios::sync_with_stdio(false),cin.......
  • The 10th Jimei University Programming Contest
    外校打星队伍,排名22/450,还算凑合吧。A.A+B问题直接枚举进制#include<bits/stdc++.h>usingnamespacestd;usingvi=vector<int>;voidsolve(){stringstr;via,b,s;cin>>str;for(autoc:str){if(c>='0'and......
  • D - Good Tuple Problem atcoder abc 327
    D-GoodTupleProblemhttps://atcoder.jp/contests/abc327/tasks/abc327_d 思路https://www.zhihu.com/question/292465499判断二分图的常见方法是染色法:用两种颜色,对所有顶点逐个染色,且相邻顶点染不同的颜色如果发现相邻顶点染了同一种颜色,就认为此图不为二分图当所......
  • 【杂题乱写】AtCoder-ARC116
    AtCoder-ARC116_CMultipleSequences朴素DP是设\(f_{i,j}\)表示第\(i\)个位置填\(j\)的方案数,时间复杂度\(O(n^2\logV)\)。考虑求出元素都不同序列个数,再根据长度乘组合数,这样长度是\(O(\logV)\)的,复杂度\(O(n\log^2V)\)。提交记录:Submission-AtCoder......
  • 【misc】[HNCTF 2022 Week1]calc_jail_beginner_level2.5(JAIL) --沙盒逃逸,breakpoint
    查看附件内容这道题过滤挺多重要的函数,比如exec,input,eval,还对长度做了限制,这里了尝试了help函数,但是最后一步!ls没通,接着考虑breakpoin函数:Python中内置了一个名为breakpoint()的函数,在Python3.7中引入,用于在调试模式下设置断点。使用breakpoint()函数会停止程序的执行,并在......
  • 【misc】[HNCTF 2022 Week1]calc_jail_beginner_level3(JAIL) --沙盒逃逸,help函数
    还是先看附件内容这里对字符串长度进行了进一步的限制,长度不能大于7,这里可以输入help(),help函数:help()函数是Python的一个内置函数,用于获取关于模块、函数、类、方法等的帮助信息。当你在交互式命令行中使用help()函数时,它会打开一个交互式帮助系统,让你能够浏览相关主题和......