Codeforces Round #514 (Div. 2)(A-C)(暑假训练8.11)

简介: 算法

机票


战绩贴贴

8.png

发挥还算正常??反正大家都没开出c,不过又被暴了555


A.Cashier


题意:

一天长度为L小时,有n个客人,每个客人从t时来,待l小时,只有没客人时才能休息,且休息一次时间长为a小时,求最多能休息多久(保证一个客人走了之后下一个客人才会来)。

思路:

由于题目给定的条件是一个客人走了之后下一个客人才来,所以我们可以直接将每两个客人走与来之间的间隔时间求出,再用此时间除以a,则可以求出每两个客人走与来之间可以休息的次数。

#define int long long
const int maxn=1e5+1000;
struct node{
    int t,l;
}mo[maxn];
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n,l,a,i;
    cin>>n>>l>>a;
    for(i=0;i<n;i++)
    {
        cin>>mo[i].t>>mo[i].l;
    }
    int ans=0,m1=0;
    for(i=0;i<n;i++)
    {
        ans+=((mo[i].t-m1)/a);
        m1=mo[i].t+mo[i].l;
    }
    ans+=((l-m1)/a);
    cout<<ans<<endl;
    return 0;
}

B. Forgery

题意:

9.png

思路:

因为我做的实在是又臭又长(因为没想到正解瞎敲了快一百行)

裹jio布代码

思路:其实是个简单bfs输入地图后,枚举地图的格子,若能染色就染色,不能就枚举下一个。

如果目标状态不是’#’,不染色。

如果染色范围出了边界,不染色。

如果都没有,就将周围8个格子染成#。

染色完毕后,与目标状态比对。

若一样,输出YES,不一样,输出NO。

#include<bits/stdc++.h>
using namespace std;
int dx[8]={1,1,-1,-1,0,0,1,-1};//移动数组就不说啦。
int dy[8]={1,-1,1,-1,1,-1,0,0}; 
int n,m;
char mubiao[1005][1005];//存目标地图。 
char bian[1005][1005];//存我们用来搜索的地图,也是方便搜完后比对。
bool bidui()
{
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      if(mubiao[i][j]!=bian[i][j])//一个一个挨着比对。 
      return false;//如果有不一样的,说明不行,返回false。 
    } 
  }
  return true;//如果没有不一样的,说明可以,返回true。 
}
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    {
      cin>>mubiao[i][j];//输入目标地图。 
      bian[i][j]='.';//要改变的地图,初始都是'.'。 
    }
    for(int x=1;x<=n;x++)
      for(int y=1;y<=m;y++)
      {
        int biao=1;//作为标记。 
        for(int z=0;z<8;z++)
        {
          int mx=x+dx[z];
          int my=y+dy[z];
          if(mx>n||mx<=0||my>m||my<=0)//如果出了边界,打标记,不能染色。
          {
            biao=0;
            break;
          }
          else if(mubiao[mx][my]!='#')//如果目标状态不是'#',打标记,不能染色。
          {
            biao=0;
            break;
          }
        }
        if(biao==0)//如果上面被标记,选下一个点。 
        continue;
        for(int z=0;z<8;z++)//没有就染色。 
        {
          int mx=x+dx[z];
          int my=y+dy[z];
          bian[mx][my]='#';//全部都染上。
        }
      }
  if(bidui())//比对。
  cout<<"YES";//可以输出YES。
  else
  cout<<"NO";//不能输出NO。
  return 0;
}

C. Sequence Transformation


题意:

读入一个正整数n。 你有一个长度为n的排列。 对于一次操作,我们需要做一下几步:

1.将目前序列内所有数的gcd加入答案中

2.将序列内随意删除一个数

3.如果序列为空,则停止操作,否则重复以上步骤 操作完毕后,我们将会得到一个答案序列。

要求输出字典序最大的那一个答案序列

思路:大多数都是打表找规律,

思路:

首先有个简单的结论是:对于任意全排列,gcd肯定都为1,并且每次操作的前n/2次都为1

因为相邻的两个数互质

根据字典序的定义,我们需要最大化每次入队的gcd

就是要贪心的判断每次对整体最好的选择是什么

所以我们第一步肯定是把所有的奇数删除,使得之后的gcd不会为1

删除偶数的时候其实可以发现剩下的数比如n=8时,删完之后剩下的有

2 4 6 8

可以看成

2x1 2x2 2x3 2x4

于是乎可以把问题转换为n/2之后的子问题,继续删奇数~

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+100;
int a[maxn];
int main()
{
    int n,i,j,t;
    cin>>n;
    int d1=1,m1=n;
    for(i=0;i<(n%2==1?n/2+1:n/2);i++)
        cout<<1<<" ";
    n-=n%2==1?n/2+1:n/2;
    while(n>3)
    {
        d1*=2;
        for(i=0;i<(n%2==1?n/2+1:n/2);i++)
             cout<<d1<<" ";
        n=n/2;
    }
    d1*=2;
    if(n==1)
    {
        cout<<m1<<endl;
    }
    else if(n==2)
    {
        cout<<d1<<" "<<d1*2<<endl;
    }
    else if(n==3)
    {
        cout<<d1<<" "<<d1<<" "<<d1*3<<endl;
    }
    return 0;
}


相关文章
|
27天前
|
人工智能 测试技术 芯片
Codeforces Round 963 (Div. 2)
Codeforces Round 963 (Div. 2)
|
5月前
Codeforces Round #729 (Div. 2)
【6月更文挑战第4天】在这两个编程问题中,B. Plus and Multiply 要求判断通过加法和乘法操作数组是否能形成目标数 `n`。思路是形如 `x^a + yb = n` 的表达式,如果满足则能构造。C. Strange Function 关注的是找到最小正整数 `x` 使得 `x` 不是 `i` 的因子,计算这些值的和模 `10^9+7`。对于每个 `i`,偶数时 `f(i)` 是 3,奇数时是 2,利用因子与最大公约数计算周期性求和。
30 1
|
人工智能 算法 BI
Codeforces Round 891 (Div. 3)
Codeforces Round 891 (Div. 3)
118 0
Codeforces Round 891 (Div. 3)
|
人工智能 算法 BI
Codeforces Round #179 (Div. 2)A、B、C、D
我们每次加进来的点相当于k,首先需要进行一个双重循环找到k点和所有点之间的最短路径;然后就以k点位判断节点更新之前的k-1个点,时间复杂度降到O(n^3),而暴力解法每次都要进行floyd,时间复杂度为O(n^4);相比之下前述解法考虑到了floyd算法的性质,更好了运用了算法的内质。
54 0
|
机器学习/深度学习 Go
codeforces round 885 (div. 2)
codeforces round 885 (div. 2)
95 0
|
机器学习/深度学习 人工智能
Codeforces Round 889 (Div. 2)
Codeforces Round 889 (Div. 2)
154 0
Codeforces Round #675 (Div. 2) A~D
Codeforces Round #675 (Div. 2) A~D
152 0
|
人工智能