首页 > 其他分享 >hey_left 7 Codeforces Round 886 (Div. 4) 续

hey_left 7 Codeforces Round 886 (Div. 4) 续

时间:2024-01-18 20:55:50浏览次数:28  
标签:886 int hey long Codeforces yy y0 left

题目链接

F.

记录下出现的数字和个数
注意放置陷阱的位置1-n都有可能
然后遍历1-n,对每个数进行因子分解,对于在因子的位置上有青蛙的,加上青蛙的个数,取最大即可

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

#define int long long
const int N=2e5+10;

void solve(){
    int n;cin>>n;
    map<int,int>mp;
    map<int,int>be;
    for(int i=1,x;i<=n;i++){
        cin>>x;
        be[x]++;
    }
//    for(auto t:be){
//        cout<<t.first<<' '<<t.second<<'\n';
//    }
    for(int i=1;i<=n;i++){
        int val=i;
        for(int j=1;j*j<=val;j++){
            if(val%j==0){
                if(be[j])
                    mp[val]+=be[j];
                if(val/j!=j){
                    if(be[val/j]) {
                        mp[val] += be[val/j];
                       // cout<<"be[j]="<<be[j]<<'\n';
                    }
                }
            }
        }
    }
    int ma=0;
    for(auto t:mp){
        if(t.first<=n&&t.second>ma){
            ma=t.second;
        }
    }
    cout<<ma<<'\n';
}

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

G.


直线上点的特性:
直线1:x1=x0
直线2:x2-x0=y2-y0,即x0-y0=x2-y2
直线3:y3=y0
直线4:x4-x0=y0-y4,即x0+y0=x4+y4

自己做的时候已经想到了x2-x0=y2-y0
以为一定要两个数比较才能确定,n方复杂度认为做不了
其实移下项就好了

然后记录答案的时候,最好是分开算,并且点数大于1

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

const int N=2e5+10;

#define int long long
map<int,int>tx,ty,tbx,tnx;
pair<int,int>a[N];
void solve(){
    tx.clear();ty.clear();tbx.clear();tnx.clear();
    int n;cin>>n;
    for(int i=1,x,y;i<=n;i++){
        cin>>x>>y;
        a[i].first=x;a[i].second=y;
        tx[x]++;
        ty[y]++;
        tbx[{x-y}]++;
        tnx[{x+y}]++;
    }
    int sum=0;
    for(int i=1;i<=n;i++){
        int xx=a[i].first,yy=a[i].second;
        if(tx[xx]>1)sum+=tx[xx]-1;
        if(ty[yy]>1)sum+=ty[yy]-1;
        if(tbx[{xx-yy}])sum+=tbx[{xx-yy}]-1;
        if(tnx[{xx+yy}])sum+=tnx[{xx+yy}]-1;
    }
    cout<<sum<<'\n';
}

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

H.

有几点导致没做出来:
1.建双向边
原来觉得从小到大的线性关系就建的单向边
2.按连通块去遍历
原来按从1-n的顺序,会出现时序问题
3.总想着从小到大线性地确定唯一关系

正解:
首先建双向边
对于每个连通块,确定一点,算出其他点的位置,注意判合法,这里用的bfs遍历连通块

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

#define int long long

void solve(){
    int n,m;cin>>n>>m;
    vector<vector<pair<int,int>>>g(n+1);
    for(int i=1,a,b,d;i<=m;i++){
        cin>>a>>b>>d;
        g[a].push_back({b,-d});
        g[b].push_back({a,d});
    }
    vector<int>dist(n+1,LLONG_MIN);
    for(int i=1;i<=n;i++){
        if(dist[i]!=LLONG_MIN)continue;
        dist[i]=0;
        queue<int>q;
        q.push(i);
        while(q.size()){
            int t=q.front();q.pop();
            for(int j=0;j<g[t].size();j++){
                int k=g[t][j].first,dis=g[t][j].second;
                if(dist[k]!=LLONG_MIN){
                    if(dist[k]!=dist[t]+dis){
                        cout<<"NO"<<'\n';
                        return ;
                    }
                }else{
                    dist[k]=dist[t]+dis;
                    q.push(k);
                }
            }
        }
    }
    cout<<"YES"<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

标签:886,int,hey,long,Codeforces,yy,y0,left
From: https://www.cnblogs.com/wwww-/p/17972501

相关文章

  • CodeForces 1466H Finding satisfactory solutions
    洛谷传送门CF传送门考虑给定\(b\)如何构造\(a\)。拎出基环树的环部分,把这些点连同它们的边删掉(这个环一定在答案中)。递归做即可。考虑我们在\(a\)的环上连一些在\(\{b_{i,n}\}\)中排得比\(a_i\)前的\(i\toj\)。可以将问题转化为,若干个环,缩点后连一些边使得它成......
  • hey_left 6 Codeforces Round 886 (Div. 4)
    题目链接A.判总和-最小值的差是否大等于10即可#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+10;voidsolve(){inta,b,c;cin>>a>>b>>c;intans=a+b+c;ans-=min({a,b,c});if(ans>=10){cout<<"YES&qu......
  • CodeForces 986F Oppa Funcan Style Remastered
    洛谷传送门CF传送门有意思的。对\(k\)分解质因数,题目实际上是想让我们解一个\(\sum\limits_{i=1}^ma_ix_i=n\)的方程。考虑\(m=1\)特判,\(m=2\)exgcd。\(m=3\)时发现\(\min\limits_{i=1}^ma_i\lek^{\frac{1}{3}}\le10^5\),所以可以跑同余最短路。......
  • CodeForces 814E An unavoidable detour for home
    洛谷传送门CF传送门考虑给图分层,一层的点一一对应上一层的一些点。设\(f_{i,j}\)为考虑了前\(i\)个点,最后一层有\(j\)个点,除了最后一层点的其他点度数限制已经满足的方案数。转移系数是\(g_{i,j,k}\)表示这一层有\(i\)个点,上一层有\(j\)个\(2\)度点,\(k\)个......
  • Codeforces Round 920 (Div. 3)
    题目链接:CodeforcesRound920(Div.3)PS:很长时间没写题,状态不好,写的很差A.Square题意:给出正方形四个点的坐标,求面积解题思路:签到查看代码 voidsolve(){ vector<PII>v; for(inti=1;i<=4;i++){ intx,y; cin>>x>>y; v.push_back({x,y}); } sort......
  • hey_left 5 Codeforces Round 898 (Div. 4)
    题目链接A.一次交换,最多让两个字符归位若三个字符都不在该在的位置上,那么无法完成若有一个字符在该在的位置上,那么可以完成usingnamespacestd;voidsolve(){chara,b,c;cin>>a>>b>>c;if(a=='a'||b=='b'||c=='c'){cout<<"YES"<<&......
  • hey_left 4 Codeforces Round 898 (Div. 4) 续
    题目链接F.先把序列分割成一个个满足条件的子序列然后二分长度,去判断子序列是否满足长度,若有一个满足,这个答案可行,判断更长的长度debug:存下的子序列忽略了单个元素,单个元素也是一个子序列,把每个元素单独作为一个子序列后可以ac题解有更简单的做法,双指针,直接遍历一遍得到答案......
  • Codeforces Round 920 (Div. 3)补题D~F
    CodeforcesRound920(Div.3)D.思路取a最大和c最小的或c最小和a最大的匹配ac代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;consti64inf=8e18;typedefpair<int,int>pii;constintmod=1e9+7;constintN=2e6+10;voidso......
  • Codeforces Round 861 (Div. 2)
    CodeforcesRound861(Div.2)C题直接数位dp即可#include<cstdio>#include<algorithm>#include<cstring>#include<map>#include<queue>#include<bitset>#include<cmath>#include<set>#include<unordered_map>#def......
  • Codeforces Round 920 (Div. 3)
    CodeforcesRound920(Div.3)A-Square#include<bits/stdc++.h>#defineendl'\n'#defineintlonglongusingnamespacestd;constintN=5e5+10;voidsolve(){ map<int,int>x; map<int,int>y; ......