首页 > 其他分享 >Pinely Round 2 (Div. 1 + Div. 2)

Pinely Round 2 (Div. 1 + Div. 2)

时间:2023-09-03 11:55:32浏览次数:40  
标签:int Pinely cin pos ++ mp Div Round

Channel

简单分类讨论情况即可  算下最多有多少人在线即可

void solve(){
    int n , a , q ; 
    cin >> n >> a >>q ; 
    int add = 0 , minn = 0 , maxx = 0 ; 
    cin >>in +1  ; 
    for(int i = 1 ; i <= q ; i++){
        if(in[i] == '+' )
            add++; 
        else minn++; 
        maxx = max(maxx , add - minn) ; 
    }
    if(a + add < n){
        printf("NO\n") ; 
    }
    else if(a + maxx >= n){
        printf("YES\n") ; 
    }
    else printf("MAYBE\n") ;  
}

Split Sort

如果x+1在x前面出现过了 那么我一定会选一次x+1使得他们有序 因此数一下这样的逆序对就行

void solve(){
    int n , ans = 0 ; 
    cin >> n ; 
    for(int i = 1; i <= n +1 ; i++)
        d[i] = 0 ; 
    for(int i = 1; i <= n ; i++){
        cin >> a[i]; 
        if(d[a[i]+1])
            ans++ ; 
        d[a[i]] = 1 ; 
    }
    printf("%d\n" , ans) ; 
}

Two-Colored Dominoes

先考虑行的要求 所以横着的对行无影响  只有竖着的个数为偶数才可以 竖着的也同理

void solve() {
  cin >> n >> m;
  V<std::string> mp(n);
  for (auto &s : mp) cin >> s;
  V<i64> row(n), col(m);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (mp[i][j] == 'L') {
        col[j]++;
      }
      if (mp[i][j] == 'U') {
        row[i]++;
      }
    }
  }
  bool pos = true;
  for (auto &i : row) {
    if (i & 1) pos = false;
    i /= 2;
  }
  for (auto &i : col) {
    if (i & 1) pos = false;
    i /=2;
  }
  if (!pos) {
    cout << "-1\n";
    return;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (mp[i][j] == 'L') {
        if (col[j]) {
          mp[i][j] = 'W';
          mp[i][j + 1] = 'B';
          col[j]--;
        } else {
          mp[i][j] = 'B';
          mp[i][j + 1] = 'W';
        }
      }
      else if (mp[i][j] == 'U') {
        if (row[i]) {
          mp[i][j] = 'W';
          mp[i + 1][j] = 'B';
          row[i]--;
        } else {
          mp[i][j] = 'B';
          mp[i + 1][j] = 'W';
        }
      }
    }
  }
  for (auto s : mp) cout << s << "\n";
}
Speedrun        

 

先考虑拓扑排序计算顺序 然后每一个任务的执行时间其实通过拓扑中也可以很快算出来
因此一个很自然的想法就是给DAG的零入度点排序,然后按顺序枚举某个作为起始时刻,不难发现其实就是不断地把前一个起始时刻加上k的过程
考虑修改某个点的值后会影响它后面的点的值,乍一看复杂度很爆炸,但仔细一想最后至多每个数都比原来大k,因此每个点最多被松弛一次,复杂度是对的
const int N=200005;
int t,n,m,k,h[N],x,y,deg[N],f[N],mx[N],ret; vector <int> v[N];
inline int calc(CI x,CI y)
{
    int d=x/k,r=x%k; return (d+(y<r))*k+y;
}
inline void reset(CI now)
{
    if (calc(mx[now],h[now])<=f[now]) return;
    ret=max(ret,f[now]=calc(mx[now],h[now]));
    for (auto to:v[now]) mx[to]=max(mx[to],f[now]),reset(to);
}
signed main()
{
    for (scanf("%lld",&t);t;--t)
    {
        RI i; for (scanf("%lld%lld%lld",&n,&m,&k),i=1;i<=n;++i)
        mx[i]=deg[i]=0,v[i].clear(),scanf("%d",&h[i]);
        for (i=1;i<=m;++i) scanf("%lld%lld",&x,&y),v[x].push_back(y),++deg[y];
        queue <int> q; vector <pi> st;
        for (i=1;i<=n;++i) if (!deg[i]) mx[i]=h[i],q.push(i),st.push_back(pi(h[i],i));
        sort(st.begin(),st.end()); ret=0; while (!q.empty())
        {
            int now=q.front(); q.pop(); ret=max(ret,f[now]=calc(mx[now],h[now]));
            for (auto to:v[now])
            {
                mx[to]=max(mx[to],f[now]); if (!--deg[to]) q.push(to);
            }
        }
        int ans=ret-st[0].fi; for (i=0;i<st.size()-1;++i)
        mx[st[i].se]+=k,reset(st[i].se),ans=min(ans,ret-st[i+1].fi);
        printf("%lld\n",ans);
    }
    return 0;
}

 

 

标签:int,Pinely,cin,pos,++,mp,Div,Round
From: https://www.cnblogs.com/Vellichor/p/17674824.html

相关文章

  • Educational Codeforces Round 154 (Rated for Div. 2)
    Preface太FW了现在,纯纯给队伍拖后腿,马上要成为我们队CFRating最低的了但换句话说徐神和祁神都这么猛,我直接躺着被嘎嘎带飞好像也很爽啊不管怎么样还是要多练,不过接下来可能要按专题重点突破了,明天队里开个会确定下大家的主攻方向再说A.PrimeDeletion因为\(13\)和\(31\)都......
  • Pinely Round 2 (Div. 1 + Div. 2)
    Preface唉懒狗了这把比赛的时候突然不想打了跑去看AIR了,所以就没打了,后面补题的时候发现前面题挺合我口味的如果打了大概率能上橙不过这种第二天早上有早八的时间还是很难打的,苦路西苦路西A.Channel统计当存在某个时刻在线人数为\(n\)时就是YES否则把所有的+加起来看看是否......
  • Educational Codeforces Round 23 A - F
    EducationalCodeforcesRound23目录EducationalCodeforcesRound23A-TreasureHuntB-MakesAndTheProductC-ReallyBigNumbersD-ImbalancedArrayE-ChoosingTheCommanderF-MEXQueriesA-TreasureHunt往四个方向走,每次操作会变动横坐标和纵坐标,横纵坐标......
  • Educational Codeforces Round 154 (Rated for Div. 2)(A—C)
    A.PrimeDeletion思路:从1到9,每个数后面都可以加一个数构成一个含有两个数的质数,只需要从s[1]~s[9]中找到一个数与s[0]构成质数即可代码实现/*******************************|Author:CHC|Problem:A.PrimeDeletion|Contest:Codeforces-EducationalCodeforcesR......
  • 【题解】Educational Codeforces Round 153(CF1860)
    每次打都想感叹一句,Educational名不虚传。A.NotaSubstring题目描述:有\(t\)组数据,对于每一组数据,你需要判断能否构造一个只由左右括号组成且长度为已经给定字符串的\(2\)倍且已经给定的字符串不是子串的合法字符串。注:合法的字符串是左右括号能完全匹配的字符串。如果能,......
  • Educational Codeforces Round 113
    稳定发挥4题A题文件输出没去掉WA了一发B题特殊情况没判到,WA了好几发,中间还交到D题去了C题简单判断一下无解,然后组合数求一下就行D题其实也挺简单的,考虑严格夹在两条竖线之间的点(不包括边界),如果它们不是在同一水平线上,则必然大于Manhattan距离,而且两个点对之间要么是x方向走多......
  • Educational Codeforces Round 154 (Rated for Div. 2)
    感觉edu的题目都比较有新意;A.PrimeDeletion题意:给定长度为9的数,且1-9每个数字出现一次,求按照原定顺序选几个数组成的质数(起码选择两个);下意识写了一个dfs,过了;1#include<bits/stdc++.h>2usingnamespacestd;3intread(){4charch=getchar();intx=0,f=1;5......
  • Educational Codeforces Round 123
    A.DoorsandKeys#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){strings;cin>>s;map<char,int>pos;for(inti=0;i<6;i++)pos[s[i]]=i;if(pos['r&......
  • Educational Codeforces Round 15 A - E
    EducationalCodeforcesRound15目录EducationalCodeforcesRound15A-MaximumIncreaseB-PowersofTwoC-CellularNetworkD-RoadtoPostOfficeE.AnalysisofPathesinFunctionalGraphA-MaximumIncrease一段上升子数组\([l,r]\)最大化\(r-l+1\),我们......
  • Educational Codeforces Round 5 A-E
    EducationalCodeforcesRound5垫底咯,中间老师找我去聊了下新学期的机房借用和训练,但出去前就只有我没出E目录EducationalCodeforcesRound5AComparingTwoLongIntegersBDinnerwithEmmaCTheLabyrinthDLongestk-GoodSegmentE-SumofRemaindersAComparingTwo......