栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[cf] Educational Codeforces Round 118 (Rated for Div. 2)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[cf] Educational Codeforces Round 118 (Rated for Div. 2)

目录
      • 前言
      • A.
      • CODE
      • B.
      • CODE
      • C.
      • CODE
      • E.
      • CODE
      • 补题问题

前言

这场出的很好,满满的罚座QAQ
传送门 :

A.

没看范围,T了一发 (感觉笑了

先判断两个数 他们的 w s ( x ) + p ws(x)+p ws(x)+p 也就是位数和 p p p 的和的长度

如果能直接比 那么就输出

否则只剩下 = = == ==的情况

对于等于的情况,我们只需要让,这两个数乘上较少的 m i n ( p 1 , p 2 ) min(p1,p2) min(p1,p2) 直接比大小就行

没仔细想过,就感觉不会T,直接交了,希望不要被hack

CODE
void solve()
{
		ll x1,p1;
		ll x2,p2;
		cin>>x1>>p1;
		cin>>x2>>p2;
		
	int wsx1 =  getws(x1); //自己写的获得位数的函数
	int wsx2 =  getws(x2);
	
	if(p1+wsx1>p2+wsx2)
	{
		cout<<">"<x2)
	cout<<">"< 
C. 

摆明是二分答案

而且是很常见的二分答案 和 最基础的那个 分木头 这个题差不多

(因为里面一个+1,让我调了好久

CODE
bool check(ll k)
{
	ll sum = 0 ;
	
	for(int i=2;i<=n;i++)
	{
		if(a[i-1] + k >= a[i])
		sum+= a[i]-a[i-1];
		else
		sum+=k;
	}
	
	sum+=k;
	
	
	if(sum >= h )
	return true;
	else
	return false;
	
}
void solve()
{
	cin>>n>>h;
	
	for(int i=1;i<=n;i++)
	cin>>a[i];
	
	ll l = 1 ,r =1e18;
	
	while(l>1;
		if(check(mid))
		r = mid;
		else
		l = mid+1;
	}
	
	if(check(l))
	cout< 
E. 

观察之后会发现,我们可以从 ‘L’ 开始bfs,然后对于每一个 . . . 如果周围 只有 < = 1 <=1 <=1个

. . . 的时候,那么这个点必然是 ‘+’,按照这个模拟即可

(其实看样例也挺好看出来的吧 hh

不过这题一直在调,不是 T L E TLE TLE 就是 R E RE RE 最后索性 s o l v e solve solve 和 c h e c k check check 全删了全部

写在了一个 m a i n main main 里面

CODE
int t;
cin>>t;
while(t -- )
{
    int n,m;
    cin >> n >> m;
    vector s(n);
    for (auto& x : s) cin >> x;
    int sx = -1, sy = -1;
    for (int i =0 ; i < n; i++)
        for (int j = 0; j < m; j++)
            if (s[i][j] == 'L')
                sx = i, sy = j;
    vector dx = {0,1,0,-1};
    vector dy = {1,0,-1,0};
    
    auto check = [&](int x, int y)->bool //通过上一场学的正则表达式
    {	//分成函数写莫名RE 
        vector> poss;
        int cnt = 0;
        for (int k = 0; k < 4; k++)
        {
            int nx = x + dx[k], ny = y + dy[k];
            if (nx < 0 || ny < 0 || nx >= n || ny >= m || s[nx][ny] == '#') continue;
            if (s[nx][ny] == '+' || s[nx][ny] == 'L') cnt++;
            poss.push_back({nx,ny});
        }
        if(cnt >= (int)poss.size()-1) return true;
        return false;
    };
    
    queue> q;
    q.push({sx,sy});
    while(q.size())
    {
        auto [x,y] = q.front();
        q.pop();
        for (int k = 0; k < 4; k++)
        {
            int nx = x + dx[k], ny = y + dy[k];
            if (nx < 0 || ny < 0 || nx >= n || ny >= m || s[nx][ny] == '#' || s[nx][ny] == '+' || s[nx][ny] == 'L') continue;
            if (check(nx,ny))
            {
                s[nx][ny] = '+';
                q.push({nx,ny});
            }
        }
    }
    for (auto& x : s)
        cout << x  << 'n';
}
补题问题

D. 貌似是一个DP,但是不会
传送门 : 和今天这个做的好像差不多的思路,但是不会 c h e c k check check

F. 某个大佬说和ICPC上海B一个思路 (我爬了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号