Codeforces Round #479 (Div. 3) 部分题解

看到F题没有思路的我螺旋爆炸弱。

A
模拟题。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;

int main(){
    int n,k;
    scanf("%d%d",&n,&k);
    while(k > 0 && n) {
        if(n % 10) {
            n--; k--;
        } else {
            n /= 10; k--;
        }
    }
    printf("%d\n",n);
    return 0;
}

B
模拟题。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;

int n;
char bbf[10];
int main(){
    cin>>n;
    string buf; cin>>buf;
    int len = buf.size();
    map< string , int >mmp;
    for(int i = 0; i < len - 1; i++) {
        string bb = "";
        bb = bb + buf[i];
        bb = bb + buf[i+1];
        if(mmp.find(bb) != mmp.end()) {
            mmp[bb]++;
        } else {
            mmp[bb] = 1;
        }
    }
    string x = (mmp.begin())->first;
    for(auto i = mmp.begin(); i != mmp.end(); i++) {
        if(i->second > mmp[x]) {
            x = i->first;
        }
    }
    cout<<x<<endl;

    return 0;
}

C
排序。模拟题。

弄清楚题意。例如1 3 3 3,不可能存在正好有两个元素小于它的x,因为这里要么就是0个,要么就是1个,要么就是4个。

k = 0要特判,因为对于1 3 3 3这样的输入,k = 0时不可能输出1(因为这样就是1个元素了),但是对于「任意大于1的数 其他大于1的数 其他大于1的数 …」这样都输入就可以输出1,因为正好就是只有0个元素小于等于1。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;

int n,k;
int a[200005];
int res[200005]; int resp;

int main() {
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    int l = 0, r = 0;
    sort(a,a+n);
    if(k == 0) {
        if(a[0] == 1) {
            printf("-1\n");
            goto leave;
        } else {
            printf("1\n");
            goto leave;
        }
    }
    while(r < n) {
        while(r < n && a[r] == a[l]) {
            r++;
        }
        res[resp] = res[resp-1] + (r - l);
        resp++;
        l = r;
    }
    for(int i = 0; i < resp; i++) {
        if(res[i] == k) {
            printf("%d\n",a[k-1]);
            goto leave;
        }
    }
    printf("-1\n");
 leave:;
    return 0;
}

D
对于题目给出的任意一个数 x x 都可以设为 x=2a3bk 。整个过程中, b b 越来越小,a越来越大。按这样的规则进行排序。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;

int n;
ll a[105];
bool cmp(ll a, ll b) {
    int cnt2a = 0, cnt2b = 0, cnt3a = 0, cnt3b = 0;
    ll a2 = a, b2 = b, a3 = a, b3 = b;
    while(a2&&a2%2 == 0) {
        a2 >>= 1, cnt2a++;
    }
    while(b2&&b2%2 == 0) {
        b2 >>= 1, cnt2b++;
    }
    while(a3&&a3%3 == 0) {
        a3 /= 3, cnt3a++;
    }
    while(b3&&b3%3 == 0) {
        b3 /= 3, cnt3b++;
    }
    return
        (cnt3a > cnt3b)
        || (cnt3a == cnt3b && cnt2a < cnt2b)
        ;
}
int main(){
    scanf("%d",&n);
    for(int i = 0; i < n; i ++) {
        scanf("%lld",&a[i]);
    }
    sort(a,a+n,cmp);
    for(int i = 0; i < n; i++) {
        printf("%lld%c",a[i],i==n-1?'\n':' ');
    }
    return 0;
}

E
注意到一个cycle中的所有点的度都为2。枚举所有度为2的点,做bfs。假如bfs中遇到度不为2的点,则这个联通分量不是一个cycle。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;

int n,m;
struct e { int to, next; } es[400005]; int ep = 1;
int head[200005];
int deg[200005];
bool vis[200005];
void adde(int from, int to) {
    es[ep].to = to;
    es[ep].next = head[from];
    head[from] = ep;
    ep++;
}
bool bfs(int stp) {
    queue< int >ws;
    ws.push(stp);
    bool flag = true;
    while(!ws.empty()) {
        int pivot = ws.front(); ws.pop();
        if(vis[pivot])continue;
        if(deg[pivot]!=2){
            flag = false;
        }
        for(int x = head[pivot]; x != 0; x = es[x].next) {
            ws.push(es[x].to);
        }
        vis[pivot] = true;
    }
    return flag;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i = 0;i < m;i++) {
        int a,b;scanf("%d%d",&a,&b);
        adde(a,b);
        adde(b,a);
        deg[a]++;
        deg[b]++;
    }
    int res = 0;
    for(int i = 0; i < n; i++) {
        if(deg[i] == 2 && !vis[i]) {
            if(bfs(i)) {
                res++;
            }
        }
    }
    printf("%d\n",res);
    return 0;
}
利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值