水题考试

T1

问题背景
从前。
有个渔人有着一流的捕鱼技术,被人们尊称为”渔王”。然而”渔王”年老的时候非常苦恼,因为他的三个儿子的渔技都很平庸。
于是个经常向人诉说心中的苦恼:”我真不明白,我捕鱼的技术这么好,我的儿子们为什么这么差?我从他们懂事起就传授捕鱼技术给他们,从最基本的东西教起,告诉他们怎样织网最容易捕捉到鱼,怎样划船最不会惊动鱼,怎样下网最容易请鱼入瓮。他们长大了,我又教他们怎样识潮汐,辨鱼汛……凡是我长年辛辛苦苦总结出来的经验,我都毫无保留地传授给了他们,可他们的捕鱼技术竟然赶不上技术比我差的渔民的儿子!”
一位路人听了他的诉说后,问:”你一直手把手地教他们吗?”
“是的,为了让他们得到一流的捕鱼技术,我教得很仔细很耐心。”
“他们一直跟随着你吗?”
“是的,为了让他们少走弯路,我一直让他们跟着我学。”
路人说:”这样说来,你的错误就很明显了。你只传授给了他们技术,却没传授给他们教训,对于才能来说,没有教训与没有经验一样,都不能使人成大器!”

问题描述
请输出问题背景中第一段汉字个数

输入

输出
一个数,表示汉字的个数(不包含标点符号)

分析

。。。。。。

代码

printf("2");

T2

问题 B: 物资支援清单
时间限制: 1 Sec 内存限制: 128 MB
提交: 263 解决: 61
[提交][状态][讨论版]
题目描述
为支援湖北,社会各界不断向湖北资助了各类物资。为了明确各个物资支援情况,你需要将物资清单进行排序。每项物资数据有物资编号、物资单价、物资数量构成。先按照总价值从高到低排序,如果两项物资相同按照单价从高到低排序,如果单价和总价值都相同,规定物资编号大的排在前面。
输入
数据包含n+1行:

第1行是一个正整数n,表示物资种类。

第2到n+1行,每行有2个用空格隔开的数字,第i行的2个数字依次表示物资编号为i-1的物资单价和数量。

输出
依次输出各物资的编号、数量和总价值。
样例输入
3
10 10
20 5
9 9
样例输出
2 5 100.000
1 10 100.000
3 9 81.000
提示
最多有100000种不同的物资,请注意价格可能是小数
如果这个数据是浮点数(double类型数据)输出请保留3位小数

分析

结构体sort

代码

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define full(a,b,c) fill(b,b+sizeof a/4,c)
#define N 100000+5
int n;
struct node
{
    double x,dan,su,zhong;
}a[N];
bool cmp(node x,node y)
{
    if(x.zhong==y.zhong)
    {
        if(x.dan==y.dan)
            return x.x>y.x;
        return x.dan>y.dan;
    }
    return x.zhong>y.zhong;
}
int main()
{
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%lf%lf",&a[i].dan,&a[i].su);
        a[i].x=i;
        a[i].zhong=a[i].dan*a[i].su;
    }
    sort(a+1,a+1+n,cmp);
    for(int i=1; i<=n; i++)
        cout<<a[i].x<<" "<<a[i].su<<" "<<a[i].zhong<<"\n";
}

T3

题目描述
CZC因为即将到来的考试在平坦的沙漠中建立了NN个单独的考室(一个考室只能容纳一人),这些考室在一条直线上,坐标分别是a_1, a_2, a_3 …a
1

,a
2

,a
3


CZC有MM位可爱的小朋友,需要参加本次考试,为了最大限度的降低本次考试作弊的风险,CZC决定把每一位小朋友都安排的越远越好(尽可能分散)。在安排小朋友的过程中,CZC突然有了一个问题:在不同的安排方案中,两个小朋友间隔的最短距离的最大值是多少?

输入格式
第1行:空格分割的数字N,MN,M
其余行:每行一个整数,表示考考室的坐标

输出格式
一个整数表示两个小朋友间隔的最短距离的最大值

输入样例
5 3
1
2
8
4
9
输出样例
3
数据范围
对于考室数和人数范围:2\leq C\leq N \leq 200,0002≤C≤N≤200,000
对于考室的坐标范围:0 \leq a_i \leq 2,000,000,0000≤a
i

≤2,000,000,000

分析

二分裸题

代码

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define full(a,b) memset(a,b,sizeof a)
#define N (200000+5)
int n,m;
long long arr[N],mn,ans;
void init()
{
    
}
int check(long long x)
{
   int pos=1,sum=1;
   for(int i=2; i<=n; i++)
       if(arr[i]-arr[pos]>=x) pos=i,sum++;
   return sum>=m;
}
int main()
{
//  freopen("问题 C: 考室分配.in","r",stdin);
//  freopen("问题 C: 考室分配.out","w",stdout);
   init();
   scanf("%d%d",&n,&m);
   for(int i=1; i<=n; i++)
       scanf("%lld",&arr[i]);
   sort(arr+1,arr+1+n);
   long long l=1,r=200000;
   while(l<=r)
   {
       long long mid=(l+r)>>1;
       if(check(mid)) ans=mid,l=mid+1;
       else r=mid-1;
   }
   printf("%lld",ans);
   return 0;
}

T4

题目描述
CZC布置完考室后,邀请还没有睡醒的小文同学到考室中进行了一场模拟考试,虽然小文同学已经拿到了题,但是他太困了,所以他把写有题的纸交给了你,希望你能在他睡醒之前解决。
问题大概是这样的。给你33个n\times n (1\leq n \leq 100)n×n(1≤n≤100)的矩阵a,b,pa,b,p
现在要求你计算a^b %pa
b
%p的值,请注意,我们重新定义了运算规则。
在这里,运算符a^b %pa
b
%p是指(当n=2n=2时)
在这里插入图片描述
输入格式
第1行:一个数n表示3个矩阵的边长
第2~n+1行,每行n个数,表示矩阵a
第n+2~2n+1行,每行n个数,表示矩阵b
第2n+2~3n+1行,每行n个数,表示矩阵p
由于这只是一个测试,所以RC的CZC只会出int范围内的非0正整数的数据。

输出格式
一个n\times nn×n的矩阵,表示计算的结果

样例输入
2
1 2
3 4
5 6
7 8
3 3
3 3
样例输出
1 1
0 1
输入输出解释
在这里插入图片描述
强调一下,输入和输出的数据全部在int范围内!

分析

快速幂升级版

代码

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define full(a,b) memset(a,b,sizeof a)
#define N (100+5)
int n,arr[N][N],brr[N][N];
void init()
{
     
}
long long dfs(int n,int m,int p)//快速幂模板 
{
    if(!m) return 1;
    if(m&1) return (long long)(n*dfs(n,m-1,p)%p);
    long long num=dfs(n,m/2,p)%p;
    return num*num%p;
}
int main()
{
//  freopen("问题 D: 考室准备.in","r",stdin);
//  freopen("问题 D: 考室准备.out","w",stdout);
    init();
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            scanf("%d",&arr[i][j]);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            scanf("%d",&brr[i][j]);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            int p;
            scanf("%d",&p);
            printf("%lld ",dfs(arr[i][j],brr[i][j],p));
        }
        puts("");
    }
    return 0;
}

T5

自动售票机

分析

如果已经按了X下,有一个地点前X位和按的键都一样,那么这个地点的后一个字母就是可以按的。
重点在怎么输出答案。(见代码)

代码

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define full(a,b) memset(a,b,sizeof a)
#define N (50+5)
int n,thn[N];char arr[N][105];
int ans[35];//储存第X个位置能否按下 
void init()
{
    full(ans,0);
}
int main()
{
//  freopen("问题 E: 自动售票机.in","r",stdin);
//  freopen("问题 E: 自动售票机.out","w",stdout);
    init();
    cin>>n;
    for(int i=1; i<=n+1; i++)
    {
        cin>>arr[i];
        thn[i]=strlen(arr[i]);
    }
    for(int i=1; i<=n; i++)
    {
        if(thn[i]<=thn[n+1]) continue;
        int flag=1;
        for(int j=0; j<thn[n+1]; j++)
            if(arr[i][j]!=arr[n+1][j])
            {
                flag=0;
                break;
            }
        if(flag)
        {
            char x=arr[i][thn[n+1]];
            ans[x-65+4]=1;//x-65是X在ABC中排第几,因为前3个不能按,所以要+4 
        }
    }
    int s=0;
    for(int i=1; i<=4; i++)
    {
        for(int j=1; j<=8; j++)
        {
            ++s;
            if(ans[s]) printf("%c",s+65-4);//可以按就输出 
            else printf("*");
        }
        puts("");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值