zoukankan      html  css  js  c++  java
  • 2019.2.11rating 题解

    A – キャンディーと2人の子供/ Fighting over Candies

    链接:a题

    题意:将三份糖果分给两个人,要求两个人分到的糖果数相等

    题解:

    法1:排序后解答

    
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int a[3];
    for(int i=0; i<3; i++){
        cin>>a[i];
    }
    sort(a,a+3);
    a[0]+a[1]==a[2]?cout<<"Yes"<<endl:cout<<"No"<<endl;
        return 0;
    }

    法二:直接写出三种可能

    
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int  main(){
        int a,b,c;
        cin>>a>>b>>c;
        if(a+b==c||a+c==b||b+c==a){
            cout<<"Yes"<<endl;
        }
        else{
            cout<<"No"<<endl;
        }
    return 0;
    }
    
    

    B – すぬけ君の涂り絵2 イージー/ Snuke’s Coloring 2 (ABC Edit)

    AtCoder – 2145 

    链接:b题

    题意:在坐标轴上取一点 (w , h ),以 y轴 和 x轴 各为一条边,得一个矩形,输入n个点图色(题目有对这n个点分别有四种要求,即用a进行判断选择)

    题解:max,min函数的运用,s和t是原点坐标,通过判断点的位置,判断涂色位置

    max与min的作用如其意思返回两个之中的最大值

    
    
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
      int W, H, N;
      cin >> W >> H >> N;
    
      int s = 0, t = 0;//坐标原点
      for (int i = 0; i < N; i++) {
        int x, y, a;
        cin >> x >> y >> a;
    
        if (a == 1) s = max(s, x);
        if (a == 2) W = min(W, x);
        if (a == 3) t = max(t, y);
        if (a == 4) H = min(H, y);
    
      }
    
      if (W <= s || H <= t) cout << 0 << endl;
      else cout << (W - s) * (H - t) << endl;
    }
    

    C – 一维反转/ 1D反转

    c题:链接

    题意:一维的黑白棋,可以将B和W分别看作黑棋和白棋

    例子:

    BWBBWB

    下最左或者最右是一样的

    WBWBBWB(加粗为下的,划线为改变的棋子

    就变成 WWWBBWB

    如果在最左下B

    就会变成BBBBBBWB

    解题思路:判断前后紧邻的棋子是否相同

    
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int  main(){
        string s;
        cin>>s;
        if(s.find('W')==-1||s.find('B')==-1){
            cout<<"0"<<endl;
        }//这是只存在单一棋子的情况
    else{
        int cnt=0;
            for(int i=0; i<s.size()-1; i++){
                if(s[i]!=s[i+1])
                    cnt++;//如果前后不同就要下一个棋子使其相同,故步数加一
            }
            cout<<cnt<<endl;
    }
    return 0;
    }
    

    E – AtCoder ***比赛

    链接:E题

    题意:输出三个单词的手字母

    解题思路:空格符是字符串输入的结束符所以就变得很简单

    string如果没有用万能函数库的话就要加头文件#include<string>

    
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int  main(){
        string a,b,c;
        cin>>a>>b>>c;
        cout<<a[0]<<b[0]<<c[0]<<endl;
    return 0;
    }

    F – 在a和b之间……

    链接:F题

    题意:(题意很直接了) 给出非负整数abab)和正整数 x。在 a b之间的整数(包括两者)中,有多少可被 x整除?

    解题思路:

    1.用循环计数,看到样本输入四我就放弃这种思路了,估计会超时,

    特意写了一个,没提交试试,应该是错的,毕竟这么大

    
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int  main(){
        ll a,b,x;
        cin>>a>>b>>x;
        ll cnt=0;
        for(int i=a; i<=b; i++){
            i%x==0?cnt++:cnt=cnt;
        }
        cout<<cnt;
    return 0;
    }
    

    2.在做到数据大的题目就要先考虑如何在过程中减小数据的大小

    b以内能被x整除以及a-1内能被x整除的数字相减便是之间的,a是否为0分类讨论一下,记住a和b都要ll,就在这wa了一次

    
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define endl '
    '
    int  main(){
    std::ios::sync_with_stdio(false);
    cin.tie(0);//加速操作,怕题目在时间上有要求
        ll a,b,x;
        cin>>a>>b>>x;
        a!=0?cout << b / x - (a - 1) / x << endl:cout << b / x + 1 << endl;
    return 0;
    }
    

    G – 盒子和糖果

    链接:G 题

    题意:输入n以及x,然后再输入n个盒子中的糖果数

    多次执行以下操作:

    • 选择一个至少包含一个糖果的盒子,然后在所选盒子中吃一个糖果。

    他的目标如下:

    • 任何两个相邻的盒子总共最多包含x个糖果

    题解:糖果数差值即为需要进行的步数(一种是与最大值的差值一种是与左右的差值)

    有两种想法

    法一是数组,for循环里面进行判断max(a[i],a[i+1])和max(a[i-1],a[i])然后再进行步骤计算

    法二是每一步进行判断,如下

    
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define maxn 1000001
    int main()
    {
        int n,x;
        cin>>n>>x;
    
        ll a,b,cnt=0;//记录操作步数
        cin>>a;//开头第一盒糖果
    	if(a>x){
    		cnt+=a-x;
    		a=x;
    	}
    	for(int i=1;i<n;i++)
    	{
    		cin>>b;
    		if((a+b)>x)
    		{
    			cnt+=a+b-x;
    			a=x-a;
    		}
    		else {
                    a=b;
            }
    	}
    	cout<<cnt<<endl;
    	return 0;
    }

    H – 普通游戏

    链接:H题

    题意:

    题解:  遍历字符串s的每一个,左右字符相等的话就看下一个字符,不等的话就删除这一个字符,然后接下一个人。如果遍历没有可以删除的字符的话或者字符串长度小于3,就说明这个人输了

  • 相关阅读:
    [文摘20070930]激励员工20种非经济手段
    [文摘20071010]绿领
    新增及删除Grid行
    SqlAnyWhere相关示例SQL语句
    [文摘20071008]全国软考相关计算机技术与软件专业资格(水平)考试
    愉悦的时候
    [文摘20070924]导致事业不成功的心理致命伤
    快乐的生活
    给网络创业者的十大建议
    [转]winForm:DataGridView的一些技巧
  • 原文地址:https://www.cnblogs.com/ygbrsf/p/12583025.html
Copyright © 2011-2022 走看看