• Codeforces Round #451 (Div. 2) A B C D E


    Codeforces Round #451 (Div. 2)

    A Rounding

    题目链接:

    http://codeforces.com/contest/898/problem/A

    思路:

    小于等于5向下,大于补上差值输出

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main() {
        ll n;
        scanf("%I64d",&n);
        int r=n%10;
        if(r<=5) printf("%I64d
    ",n-r);
        else printf("%I64d
    ",n+10-r);
        return 0;
    }
    

    B Proper Nutrition

    题目链接:

    http://codeforces.com/contest/898/problem/B

    思路:

    暴力枚举

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main() {
        ll a,b,n;
        scanf("%I64d",&n);
        scanf("%I64d %I64d",&a,&b);
        bool flag=false;
        ll index=n/a;
        for(ll i=0;i<=index;++i) {
            ll temp=n-i*a;
            if(temp/b*b==temp) {
                printf("YES
    ");
                printf("%I64d %I64d
    ",i,temp/b);
                flag=true;
                break;
            }
        }
        if(!flag) printf("NO
    ");
        return 0;
    }
    

    C Phone Numbers

    题目链接:

    http://codeforces.com/contest/898/problem/C

    思路:

    暴力大法。
    就是string排序的时候重写一下cmp,另外sort之后不要unique,不然会wa5

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    vector<string> vec[21];
    map<int,string> mp;
    set<string> se;
    bool cmp(string a, string b) {
        if(a.length()!=b.length()) return a.length()<b.length();
        return a<b;
    }
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
        int n,cnt,id;cin>>n;
        string name;
        int tot;
        string number;
        cnt=1;
        for(int i=0;i<n;++i) {
            cin>>name;
            cin>>tot;
            if(se.count(name)==0) {
                mp[cnt]=name;
                se.insert(name);
                ++cnt;
            }
            for(auto it=mp.begin();it!=mp.end();it++) {
                if(it->second==name) {
                    id=it->first;
                    break;
                }
            }
            for(int j=0;j<tot;++j) {
                cin>>number;
                vec[id].push_back(number);
            }
        }
        cout<<se.size()<<endl;
        for(int i=1;i<cnt;++i) {
            sort(vec[i].begin(),vec[i].end(),cmp);
            for(unsigned int j=0;j<vec[i].size();++j) {
                string s;
                s=vec[i][j];
                reverse(s.begin(),s.end());
                for(unsigned int z=j+1;z<vec[i].size();++z) {
                    string ss;
                    ss=vec[i][z];
                    reverse(ss.begin(),ss.end());
                    if(ss.substr(0,s.length())==s) {
                        vec[i].erase(vec[i].begin()+j);
                        --j;
                        break;
                    }
                }
            }
            cout<<mp[i]<<" "<<vec[i].size()<<" ";
            for(unsigned int j=0;j<vec[i].size();++j) {
                if(j>0) cout<<" "<<vec[i][j];
                else cout<<vec[i][j];
            }
            cout<<endl;
        }
        return 0;
    }
    

    D Alarm Clock

    题目链接:

    http://codeforces.com/contest/898/problem/D

    题目大意:

    不允许在m分钟内有k个闹钟响,每个闹钟响一分钟,求最少关掉的闹钟数目

    思路:

    首先其实按照从小到大的时间顺序查看,因为这相当于一个m大的滑块在整个数组上划一遍,所以使用队列就可以,其实就是贪心的思想。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1000005;
    int a[maxn];
    int main() {
        int n,m,k,num,res=0,tot=0;
        scanf("%d %d %d",&n,&m,&k);
        for(int i=1;i<=n;++i) a[i]=0;
        for(int i=1;i<=n;++i) scanf("%d",&num),a[num]=1;
        for(int i=1;i<=1e6;++i) {
            if(a[i]) ++tot;
            if(i>m&&a[i-m]) --tot;
            if(tot==k) {
                --tot;
                ++res;
                a[i]=0;
            }
        }
        printf("%d
    ",res);
        return 0;
    }
    

    E Squares and not squares

    题目链接:

    http://codeforces.com/contest/898/problem/E

    思路:

    统计出给定序列的完全平方数和非完全平方数,看看是要补平方数还是补非完全平方数。记录下每个数距离最近的完全平方数的插值,同时记录下改为非完全平方数的最小差值。根据是前面所述的两种情况中的一种进行排序,选择出最小的数据插值求和即可。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 200005;
    struct node {ll num,a,b;int d;}ans[maxn];
    bool cmp1(node x, node y) {return x.a<y.a;}
    bool cmp2(node x, node y) {return x.b<y.b;}
    int main() {
        int n;scanf("%d",&n);
        int d1,d2,cnt;
        ll sum=0;
        d1=0;
        for(int i=0;i<n;++i) {
            scanf("%I64d",&ans[i].num);
            ll number=(ll)sqrt(ans[i].num);
            ll x=number*number;
            if(x==ans[i].num) {
                ++d1;
                ans[i].d=1;
            } else ans[i].d=0;
            ll y=(number+1)*(number+1);
            ans[i].a=min(ans[i].num-x,y-ans[i].num);
            if(max(ans[i].num-x,y-ans[i].num)>1) ans[i].b=1;
            else ans[i].b=2;
        }
        d2=n-d1;
        if(d2>d1) {
            cnt=n/2-d1;
            sort(ans,ans+n,cmp1);
            for(int i=0;i<n;++i) {
                if(ans[i].a!=0&&ans[i].d==0) {
                    sum+=ans[i].a;
                    --cnt;
                    if(cnt==0) break;
                }
            }
        } else if(d1>d2) {
            cnt=n/2-d2;
            sort(ans,ans+n,cmp2);
            for(int i=0;i<n;++i) {
                if(ans[i].b!=0&&ans[i].d==1) {
                    sum+=ans[i].b;
                    --cnt;
                    if(cnt==0) break;
                }
            }
        }
        printf("%I64d
    ",sum);
        return 0;
    }
    
  • 相关阅读:
    Java消息队列
    SpringBoot使用Redis缓存
    SpringBoot缓存
    c++question 004 c++基本数据类型有哪些?
    谭浩强 c++程序设计第一章课后习题 第10题
    谭浩强 c++程序设计第一章课后习题 第7题
    servlet从服务器磁盘文件读出到浏览器显示,中文乱码问题,不要忘记在输入流和输出流都要设置编码格式,否则一个地方没设置不统一就会各种乱码
    response.setContentType("text/html;charset=utf-8")后依然乱码的解决方法
    换了台电脑tomcat自己运行没问题,eclipse中配置tomcat开启了浏览器却404错误解决
    Dynemic Web Project中使用servlet的 doGet()方法接收来自浏览器客户端发送的add学生信息形成json字符串输出到浏览器并保存到本地磁盘文件
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/8051788.html
Copyright © 2020-2023  润新知