第八周

老和尚与小和尚

problem description

从前有个老和尚对小和尚讲故事,他说他早上看到一个年轻男子赶着n头牛,在农田里耕种,突然下起了大雨,年轻男子怕牛着凉了,就打算把它们安排到几个各自分开的草棚下面避雨,他一共有q次操作,每次操作都将牛Xi与牛Yi所在的草棚合并在一起,对于n头牛,编号分别为1,2,3,...,n。

多组输入。对于每组测试数据,第一行包含两个整数n,m,表示n头牛,m次操作,接下来m行,每行包括三个整数Zi,Xi,Yi,当Zi=1时,将牛Xi与牛Yi所在的草棚合并在一起,当Zi=2时,请输出牛Xi和牛Yi是否在一个草棚,是的输出"Yes",否则输出"No"(不包含双引号)。(1<=n<=10000,1<=m<=200000)

对于Zi=2时,输出"Yes"或"No"(不包含双引号)。行末换行。

sample input

4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4

sample output

No
Yes
No
Yes

标程

#include <bits/stdc++.h>

using namespace std;

bool check(string a,string b){
    if(a.size()!=b.size())
    return a.size()>b.size();
    int p=0;
    while(p<(a.size())&&a[p]==b[p])
    p++;
    if(p==a.size()||a[p]>b[p])//a>=b为true 
    return true;
    else
    return false;
}
int ans[20010],len;
string a,b;
void work(){
    int jw=0,i,j;
    for(i=a.size()-1,j=b.size()-1;i>=0&&j>=0;i--,j--){
        if(a[i]-b[j]+jw<0)
        ans[len++]=10+jw+(a[i]-b[j]),jw=-1;
        else
        ans[len++]=a[i]-b[j]+jw,jw=0;
    }
    for(;i>=0;i--)
    if(a[i]-'0'+jw<0)
    ans[len++]=10+jw+a[i]-'0',jw=-1;
    else
    ans[len++]=jw+a[i]-'0',jw=0;
}
int main(){
    while(cin>>a>>b){
        int flag=0;
        if(!check(a,b))
        swap(a,b),flag=1;
        memset(ans,0,sizeof(ans));
        len=0;
        work();
        if(flag)
        cout<<"-";
        int flag2=0;
        for(int i=len-1;i>=0;i--){
            if(ans[i]!=0)
            flag2=1;
            if(flag2)
            cout<<ans[i];
        }
        if(!flag2)
        cout<<0;
        cout<<"\n";
    }
}

高飞学长的多边形

problem description

高飞学长最喜欢的几何图形是规则的多面体。 请注意,有五种规格的多面体:
四面体。 四面体有4个三角形面。
立方体。 多维数据集具有6个正方形的面。
八面体。 八面体有8个三角形面。
十二面体。 十二面体有12个五边形的面。
二十面体。 二十面体有20个三角形面。
高飞学长有n个多面体。 一天,他想知道他的多面体总共有多少个面。 帮助高飞学长,找到答案!

多组输入,输入的第一行包含一个整数n(1≤n≤200000)表示青竹学长拥有的多面体的数量。
接下来n行中的每一行都包含字符串Si表示青竹学长多面体中第i个多面体的名称。 该字符串可以如下所示:
如果青竹学长手中的第i个多面体是四面体,则为“Tetrahedron”(不带引号)。
如果青竹学长手中的第i个多面体为立方体,则为“Cube”(不带引号)。
如果青竹学长手中的第i个多面体是八面体,则为“Octahedron”(不带引号)。
如果青竹学长手中的第i个多面体是十二面体,则为“Dodecahedron”(不带引号)。
如果青竹学长手中的第i个多面体是二十面体,则为“Icosahedron”(不带引号)。

行末换行,输出一个数字表示青竹学长拥有的所有多面体的总面数。

sample input

4
Icosahedron
Dodecahedron
Tetrahedron
Cube
3
Dodecahedron
Octahedron
Octahedron

sample output

42
28

标程

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    while(cin>>n){
    int ans=0;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        if(s=="Tetrahedron")
            ans+=4;
        if(s=="Cube")
            ans+=6;
        if(s=="Octahedron")
            ans+=8;
        if(s=="Dodecahedron")
            ans+=12;
        if(s=="Icosahedron")
            ans+=20;
         }
         cout<<ans<<endl;
    }
    return 0;
}

公式求和

problem description

已知:Sn= 2+2/2+2/3+2/4+…+2/n。
现给出一个整数k,要求计算出一个最小的n,使得 Sn>k,保证总能满足该条件。(Sn结果应为浮点型)

多组输入,每行一个正整数k(1<=k<=30)

一个正整数n,行末换行。

sample input

1

sample output

1

标程

#include <bits/stdc++.h>

using namespace std;

int main(){
    int k,n;
    while(cin>>k){
        double ans=0;
        n=0;
        for(;ans<=k;++n,ans+=2.0/n);
        cout<<n<<endl;
    }
    return 0;
}

Bernard的遗传密码

problem description

Bernard正在设计一种新型细菌的遗传密码,以有效地生产疫苗。具体来说,Bernard专注于编码一种蛋白质的DN***段。 DN***段由仅包含字符“ A”,“ T”,“ G”和“ C”的字符串表示。
Bernard已确定,如果DN***段中某一段的最大连续相同核苷酸的序列长度为偶数,则该蛋白质将无功能。例如,由DNA字符串“ GTTAAAG”描述的蛋白质。它包含四个最大的连续相同核苷酸序列:“ G”,“ TT”,“ AAA”和“ G”。该蛋白质是无功能的,因为序列“ TT”具有偶数长度。
Bernard正在尝试从他目前拥有的蛋白质中获得功能性蛋白质。 Bernard可以在DN***段中插入其他核苷酸。每个其他核苷酸都是{'A','T','G','C'}中的一个字符。 Bernard希望确定使DNA编码功能蛋白所需的最小插入次数。

多组输入,其中包含长度为n(1≤n≤100)的字符串s。 s的每个字符都来自集合{'A','T','G','C'}。

输出一个整数表示使DNA能够编码功能蛋白所需的最小插入次数。行末换行

sample input

GTTAAAG
AACCAACCAAAAC

sample output

1
5

标程

#include <bits/stdc++.h>

using namespace std;

int main () {
  string s;  
  while(cin>>s){
      int n, sum, res;
      n=sum=res=0;
      for(int i = 0; i < s.size(); i++){
        sum++;
        if(s[i] != s[i+1]){
            if(sum % 2 == 0){
                res++;
            }
            sum = 0;
        }
    }
    cout<<res<<endl;
  }
  return 0;
}

⑨的网格

problem description

sample input

1 1
2 3

sample output

0
14

标程

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
typedef long long ll;

int main() {
    ll i,j,m,n,t,sum;
    while(cin>>m>>n) {
        sum=0;
        for(i=2; i<=n; i+=2)
            for(j=2; j<=m; j+=2)
                sum+=(n-i+1)*(m-j+1);
        sum *= 2;
        for(ll y = 2; y <= m; y += 2) {
            sum += (n + 1) * (m - y + 1);
        }
        for(ll y = 2; y <= n; y += 2) {
            sum += (m + 1) * (n - y + 1);
        }
        cout<<sum<<endl;
    }
    return 0;
}
全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务