首页 > 其他分享 >AtCoder Beginner Contest 310

AtCoder Beginner Contest 310

时间:2023-07-16 14:44:21浏览次数:47  
标签:AtCoder typedef const Beginner int 310 long solve return

(AtCoder Beginner Contest 310)

 A - Order Something Else

思路:比较下打折和不打折的情况

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;

void solve(){
    int n,p,q;cin>>n>>p>>q;
    int ans=p;
    for(int i=1;i<=n;++i){
        int x;cin>>x;
        ans=min(ans,x+q);
    }
    cout<<ans;
}
signed main(){

    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //init();
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

B - Strictly Superior

思路:找出满足条件的任务(i,j)即YES,满足:

p[j]<=p[i],j任务的功能需包含i所有的功能,若p[j]=p[i],j任务还需比i任务多至少1个功能

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;

void solve(){
    int n,m;cin>>n>>m;
    set<int>se[n];
    vector<int>p(n),c(n);
    for(int i=0;i<n;++i){
        cin>>p[i]>>c[i];
        for(int j=0,x;j<c[i];++j){
            cin>>x;
            se[i].insert(x);
        }
    }
    bool ok=false;
    for(int i=0;i<n;++i){
        for(int j=0;j<n;++j){
            if(i!=j&&p[j]<=p[i]){
                int same=0;
                for(auto v:se[i]){
                    if(se[j].count(v)){
                        same++;
                    }
                }
                if(p[j]<p[i]&&same==se[i].size()){
                    ok=true;break;
                }else if(p[j]==p[i]&&same==se[i].size()&&se[j].size()>same){
                    ok=true;break;
                }
            }
        }
        if(ok)break;
    }
    if(ok)cout<<"Yes";
    else cout<<"No";
}
signed main(){

    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //init();
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

 C - Reversible

思路:用map标记原始有的所有字符串,询问字符串s是否含有时,看s和s的倒序后的字符串是否被标记即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;

void solve(){
    int n,ans=0;cin>>n;
    string s;
    map<string,int>mp;
    for(int i=0;i<n;++i){
        cin>>s;
        string a=s;
        reverse(s.begin(), s.end());
        if(!mp[s]&&!mp[a])ans++;
        mp[a]++;
    }
    cout<<ans;
}
signed main(){

    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //init();
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

D - Peaceful Teams

思路:搜索所有分队可能,求所有满足条件的情况

#include<bits/stdc++.h>
using namespace std;
#define  int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<char,int>PCI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;
typedef long long ll;


vector<vector<int>>ve;
int g[11][11],res;
int n,t,m;
void dfs(int u,int cnt){
    if(cnt>t)return ;
    if(u>n){
        if(cnt==t){
            for(auto i:ve)
                for(auto a:i)
                    for(auto b:i)
                        if(g[a][b])return ;
            res++;
        }
        return ;
    }
    for(int i=1;i<=cnt+1;++i){
        ve[i].push_back(u);
        dfs(u+1,max(i,cnt));
        ve[i].pop_back();
    }
}
void solve(){
    cin>>n>>t>>m;
    ve=vector<vector<int>>(n+1,vector<int>(n+1));
    for(int i=0,a,b;i<m;++i){
        cin>>a>>b;g[a][b]=g[b][a]=1;
    }
    dfs(1,0);
    cout<<res;
    return ;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T=1;
    //cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
View Code

 

E - NAND repeatedly

思路:求所有区间的价值和。可以看出 a⊼b =!(a&b)。

用f(i)表示以i结尾的所有区间的价值和,将所有f(i)加起来即可

f(i)的状态转移:

若a[i]为0,f(i)=f(i-1)+(i-1);

若a[i]为1,f(i)=(i-1)-f(i-1);

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int>PII;

typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7;
const double eps=1e-6;

void solve(){
    int n;cin>>n;
    string s;cin>>s;
    s.insert(s.begin(),' ');
    vector<int>f(s.size(),0);
    int ans=0;
    //f[1]=!(s[1]&&s[1]);
    for(int i=1;i<=n;++i){
        if(s[i]=='0'){
            f[i]+=(i-1);
        }else{
            f[i]+=(i-1-f[i-1]);
        }
        f[i]+=(s[i]-'0');//cout<<f[i]<<' ';
        ans+=f[i];
    }
    cout<<ans;
}
signed main(){

    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    //init();
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

标签:AtCoder,typedef,const,Beginner,int,310,long,solve,return
From: https://www.cnblogs.com/bible-/p/17557808.html

相关文章

  • 近期 AtCoder Beginner Contest 题目选做
    AtCoderBeginnerContest310Ehttps://atcoder.jp/contests/abc310/tasks/abc310_e我们要求所有区间的NAND之和,发现NAND最后只可能是\(0\)或\(1\),所以我们只需要计数区间NAND为\(1\)的即可。考虑dp,设\(f_{i,0/1}\)表示以\(i\)结尾的区间最后NAND和为\(0/......
  • [ABC310F]Make 10 Again
    [ABC310F]Make10Again题意给定\(N\)个骰子,每个骰子会随机的出现数字\(1\)到\(A_i\),求能够从\(N\)个骰子中选若干个,使他们的点数之和为\(10\)的概率。\(N\leqslant100\)Solution第一眼思路为设计状态\(dp(i,j)\)为前\(i\)个骰子,点数之和为\(j\)的概率。......
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)题解
    点我看题A-OrderSomethingElse直接比较\(P\)和\(Q+min(D_i)\),输出较小值即可。点击查看代码#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<n;++i)#definerepn(i,n)for(inti=1;i<=n;++i)#defineLLlonglong#definefifirst#definesesecond#defi......
  • AtCoder Beginner Contest 310
    目录题目传送门:abc310比赛摘记:B题没读懂题意。。。如此简单题卡了好久继续加油哈......
  • Atcoder Regular Contest 118 F - Growth Rate
    想到插值其实就挺套路的了吧……设\(dp_{i,j}\)表示有多少种方法确定\(a_i\sima_n\)使得\(a_i=j\)。那么有\(dp_{i,j}=\sum\limits_{k\geja_i}dp_{i+1,k}\)。边界条件是\(dp_{n+1,1\simm}=1\)。不难发现复杂度与值域有关,一眼过不去的样子。考虑优化,记\(lim_i\)满足......
  • Atcoder AGC062C Mex of Subset Sum
    对\(a_i\)从小到大进行排序,因为想到若\(<a_{i-1}\)的不能取到的数因为\(a_i>a_{i-1}\)肯定是能保证取不到的。对排完序的\(a_i\)做一个前缀和\(s_i=\sum\limits_{j=1}^n\),令\(A_i\)为\(a_{1\simi}\)中无法表示为子序列之和且\(<s_i\)的正整数的集合......
  • AtCoder Beginner Contest 294
    A-Filter#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);intn;cin>>n;for(intx;n;n--){cin>&......
  • AtCoder Beginner Contest 309 - D(最短路)
    目录D-AddOneEdge法一:dijkstra法二:BFS+队列题目传送门:abc309前面的简单题就不放了D-AddOneEdge题意:给你一个无向图图,分为两个连通块,一个顶点数为n1(1~n1),一个顶点数为n2(n1+1~n1+n2),图中共有m条边。如果现在在两个连通块之间连接一条边,那么顶点1与顶点n1+n2......
  • AtCoder Beginner Contest 162
    AtCoderBeginnerContest162ABCD全暴力E数学题看不懂,感性理解F线性dp,非常基础我不会,寄E-SumofgcdofTuples(Hard)看了题解发现好多做法都是推一堆式子,我实在看不懂(卷积莫反啥啥的呜呜呜)然后看见这个感觉比较好感性理解:(来自洛谷题解)#include<bits/stdc++.h>#def......
  • Atcoder Regular Contest 114 F - Permutation Division
    显然分成\(k\)段以后,最大化形成的排列的字典序的策略是将所有段按第一个元素的大小降序排列。由于最终排列的字典序肯定\(\ge\)原排列的字典序,因此我们考虑最大化最终排列与原排列的LCP,这部分就考虑二分答案,记\(dp_i\)表示以\(p_1\)开始\(p_i\)结尾的LDS的长度,那么......