NEUQ-ACM 第三次双周赛

7-1 打字

分数 20

全屏浏览题目

切换布局

作者 neuqAcmClub

单位 东北大学秦皇岛分校

如果你仍然再用二指禅打字,那我建议你重新学习打字,这样你打字会更快,感觉更舒适和愉快。

有很多网站教授正确的打字。下图描述了基本原理: 用同一手指按压颜色相同的键。黄色键需要用小指按压,蓝色的用无名指,绿色的用中指,红色的用食指。

另外,左手按键盘的左侧(从左侧的5、T、G、B键开始)右手按压右侧(从右侧的键6、Y、H、N开始)。拇指负责空格键。

图片描述的键盘是美式键盘。

现在,给出一段长度为 len(1≤len≤50) 的字符串,请你计算如果正确打出这个字符串,每个手指敲击键盘的次数。

输入格式:

输入为一行,一个由大写字母、数字和特殊符号组成的字符串(不包括空格,不需要管图片中未显示的按键)。

输出格式:

输出8行,表示左手小指、无名指、中指、食指以及右手食指、中指、无名指、小指敲击键盘的次数。

输入样例1:

AON=BOO; 

输出样例1:

1
0
0
1
1
0
3
2

输入样例2:

PRINT'NY'[NASLA] 

输出样例2:

2
1
0
2
4
1
1
5

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 

#include<bits/stdc++.h>
using namespace std;
int cnt[8],t,len;
string s;
int main()
{
    getline(cin,s);
    len=s.length();
    for(int i=0;i<len;i++)
    {
        if(s[i]=='1'||s[i]=='Q'||s[i]=='A'||s[i]=='Z')
        {
            cnt[0]++;
            continue;
        }
        if(s[i]=='2'||s[i]=='W'||s[i]=='S'||s[i]=='X')
            {
            cnt[1]++;
            continue;
        }
        if(s[i]=='3'||s[i]=='E'||s[i]=='D'||s[i]=='C')
        {
            cnt[2]++;
            continue;
        }
        if(s[i]=='4'||s[i]=='R'||s[i]=='F'||s[i]=='V'||s[i]=='5'||s[i]=='T'||s[i]=='G'||s[i]=='B')
        {
            cnt[3]++;
            continue;
        }
        if(s[i]=='6'||s[i]=='Y'||s[i]=='H'||s[i]=='N'||s[i]=='7'||s[i]=='U'||s[i]=='J'||s[i]=='M')
        {
            cnt[4]++;
            continue;
        }
        if(s[i]=='8'||s[i]=='I'||s[i]=='K'||s[i]==',')
        {
            cnt[5]++;
            continue;
        }if(s[i]=='9'||s[i]=='O'||s[i]=='L'||s[i]=='.')
        {
            cnt[6]++;
            continue;
        }if(s[i]=='0'||s[i]=='P'||s[i]==';'||s[i]=='/'||s[i]=='-'||s[i]=='['||s[i]==39||s[i]=='='||s[i]==']')
        {
            cnt[7]++;
            continue;
        }
    }
	for(int i=0;i<=7;i++)cout<<cnt[i]<<endl;
}

7-2 分香肠

有题解

分数 20

全屏浏览题目

切换布局

作者 neuqAcmClub

单位 东北大学秦皇岛分校

有 N 根完全相同的香肠, 现在要平均分给 M 个客人。 问最少需要切几刀才能将其平均分给客人(不能多个香肠一起切)。

输入格式:

两个整数 N(1≤N≤105) 和 M(1≤M≤105)

输出格式:

一个整数,表示要切的刀数

输入样例:

在这里给出一组输入。例如:

2 6

输出样例:

在这里给出相应的输出。例如:

4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
int n,m,t1,t2;
int main()
{
    cin>>n>>m;
    t1=n,t2=m;
    while(t1!=t2)
    {
        if(t1<t2)swap(t1,t2);
        t1-=t2;
    }
    cout<<m-t1;
}

 

7-3 h0145. 会议安排

分数 20

全屏浏览题目

切换布局

作者 黄正鹏

单位 贵州工程应用技术学院

学校的礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。

输入格式:

第一行是一个整型数m(m<100)表示共有m组测试数据。
每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)

输出格式:

对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行

输入样例:

在这里给出一组输入。例如:

2
2
1 10
10 11
3
1 10
9 11
11 20

输出样例:

在这里给出相应的输出。例如:

2
2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 

#include<bits/stdc++.h>
using namespace std;
int m,n,ans;
struct sss
{
    int b,e;
}t[10005];
istream& operator>>(istream& in,sss& a)
{
    in>>a.b>>a.e;
    return in;
}
bool cmp(sss a,sss b)
{
    return a.e<b.e;
}
int main()
{
    cin>>m;
    for(int i1=1;i1<=m;i1++)
    {
        cin>>n;
        int end=0,ans=0;
        for(int i=1;i<=n;i++)cin>>t[i];
        sort(t+1,t+1+n,cmp);
        for(int i=1;i<=n;i++)
        {
            if(t[i].b>=end)
            {
                end=t[i].e;
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

7-4 神秘密码

分数 20

全屏浏览题目

切换布局

作者 neuqAcmClub

单位 东北大学秦皇岛分校

传说二战时X国收到了上帝的一串密码,只有解开密码,才能阻止战争的继续进行,世界才会恢复和平。解开密码的第一道工序就是解压缩密码,上帝对于连续的若干个相同的子串"X"会压缩为"[DX]"的形式(D是一个整数且1<=D<=99),比如说字符串"CBCBCBCB"就压缩为"[4CB]"或者"[2[2CB]]",类似于后面这种压缩之后再压缩的称为二重压缩。如果是"[2[2[2CB]]]"则是三重的。现在我们给你上帝发送的密码,请你对其进行解压缩。

输入格式:

一个字符串。

输出格式:

一个字符串。

输入样例:

在这里给出一组输入。例如:

AC[3FUN]

输出样例:

在这里给出相应的输出。例如:

ACFUNFUNFUN

【数据范围】

解压后的字符串长度在 20000 以内,最多只有十重压缩。保证只包含数字、大写字母、[ 和 ]

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <bits/stdc++.h>
using namespace std;
string rs()
{
    int num;
    string str, tstr;
    char ch;
    while(cin>>ch)
	{
        if(ch=='[')
		{
            cin>>num;
            tstr=rs();
            while(num--)str+=tstr;
        }
        else
		{
            if(ch==']')
			{
                return str;
            }
            str+=ch;
        }
    }
    return str;
}
int main() 
{
    cout<<rs();
    return 0;
}

 

7-5 h0114.国王游戏

有题解

分数 20

全屏浏览题目

切换布局

作者 黄正鹏

单位 贵州工程应用技术学院

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。
首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。
然后,让这 n 位大臣排成一排,国王站在队伍的最前面。
排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:
排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。
注意,国王的位置始终在队伍的最前面。

输入格式:

第一行包含一个整数 n(1≤n≤1000),表示大臣的人数。
第二行包含两个整数 a (0<a)和 b(b<10000),之间用一个空格隔开,分别表示国王左手和右手上的整数。
接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式:

输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

输入样例:

在这里给出一组输入。例如:

3
1 1
2 3
7 4
4 6

输出样例:

在这里给出相应的输出。例如:

2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <bits/stdc++.h>
using namespace std;
int bb[20005],S[20005],ans[20005],a[20005];
struct aaa
{
    int a;
    int b;
    long long a_b;
}mm[1005];
int read() 
{
    int ans=0,flag=1;
    char ch=getchar();
    while( (ch>'9' || ch<'0') && ch!='-' ) ch=getchar();
    if(ch=='-') flag=-1,ch=getchar();
    while(ch>='0' && ch<='9') ans=ans*10+ch-'0',ch=getchar();
    return ans*flag;
}
void times(int x) 
{
    memset(a,0,sizeof(a));
    for(int i=1;i<=ans[0];i++) 
	{
        ans[i]=ans[i]*x;
        a[i+1]+=ans[i]/10;
        ans[i]%=10;
    }
    for(int i=1;i<=ans[0]+4;i++) 
	{
        ans[i]+=a[i];
        if(ans[i]>=10) 
		{
            ans[i+1]+=ans[i]/10;
            ans[i]%=10;
        }
        if(ans[i]!=0) 
		{
            ans[0]=max(ans[0],i);
        } 
    }
    return ;
}
int divition(int x) 
{
    memset(a,0,sizeof(a));
    int q=0;
    for(int i=ans[0];i>=1;i--) 
	{
        q*=10;
        q+=ans[i];
        a[i]=q/x;
        if(a[0]==0 && a[i]!=0) 
		{
            a[0]=i;
        }
        q%=x; 
    }
    return 0;
}
bool compare() 
{
    if(S[0]==a[0]) 
	{
        for(int i=a[0];i>=1;i--) 
		{
            if(a[i]>S[i]) return 1;
            if(a[i]<S[i]) return 0;
        }
    }
    if(a[0]>S[0]) return 1;
    if(a[0]<S[0]) return 0;
}
void cp () 
{
    memset(S,0,sizeof(S));
    for(int i=a[0];i>=0;i--) 
	{
        S[i]=a[i];
    }
    return ;
}
bool cmp(aaa a,aaa b) 
{
    return a.a_b<b.a_b;
}
int main() 
{
    int n=read();
    for(int i=0;i<=n;i++) 
	{
        mm[i].a=read(),mm[i].b=read();
        mm[i].a_b=mm[i].a*mm[i].b;
    }
    sort(mm+1,mm+n+1,cmp);
    ans[0]=1,ans[1]=1;
    for(int i=1;i<=n;i++) 
	{
        times(mm[i-1].a);
        divition(mm[i].b);
        if(compare()) 
		{
            cp();
        }
    }
    for(int i=S[0];i>=1;i--)
        printf("%d",S[i]);
    return 0;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值