草庐IT

acm可好玩了(6) 题解

Meteor的博客 2023-03-28 原文

今天我要ak!!

按照题意直接输出就好了

#include <stdio.h>
int main()
{
    printf("今天我要AK\n");
}

小A的方程题

给出了三个方程式,只要按照题意,直接模拟带入就行,跟高中的函数套函数差不多,模拟题,注意要保留小数点后三位,对于小数来说,请使用double来提高精确值

#include <stdio.h>
#include <math.h>

int main () {
	double x;
	scanf("%lf",&x);
	double f = 2 * x + 3;
	double g = f * f + 2 * f + 6;
	double h = sqrt(g + sqrt(f));
	printf("%.3lf\n", h);
}

\(a+b \ge c?\)

这里考察的是进制转换,高中数学应该学过,对于一个非\(十\)进制的数字转换成\(10\)进制的数字,我们应该用每一位的权重来乘以每一位的数字,然后进行换算,如果不会进制转换,可以参考一下链接
进制转换
题解中的temp[i]-'0' 是将一个字符串数字变成一个number的数字,\(4-3=1\)可以是\(4\)这个数字\(3\)这个数字的距离是\(1\),那么-'0'就相当于到'0'
这个字符串的距离,然后就发现,'1'就可以转化成\(1\)了,因为他到'0'的距离就是\(1\)

#include <stdio.h>
#include <string.h>
#define N 100010
long long c;
char a[N];
char b[N];
//使用long long 防止爆int
long long get(char temp[],int len)
{
    long long ans=0;
    for(int i=0;i<len;i++)
    {
        ans=ans*6+(temp[i]-'0');//模拟权重进行运算
    }
    return ans;
    // 比如 123 是六进制,那么十进制应该是1*6^2+  2*6^1+3*6^0 从1 开始算,其实就是for循环,
    //然后这样for循环这样乘就可以了
    
    
}
int main()
{
    scanf("%s%s",a,b);
    scanf("%lld",&c);
    int len1=strlen(a);
    int len2=strlen(b);
    long long temp=get(a,len1)+get(b,len2);//分别传入长度和字符串,进行求解
    if(temp>=c) printf("YES\n");
    else printf("NO\n");
}

九九乘法表

模拟,按照题意的直接模拟就可以了,注意这里'\t'的使用

#include <stdio.h>
int main () {
    for (int i = 1; i <= 9; i ++ ) {
        for (int j = 1; j <= i; j ++ ) {
            printf("%d * %d = %d  ", i, j, i * j);
        }
        puts("");
    }
}

Arcaea Problem

判断是什么三角形,高中数学我们学过,当\(a^2+b^2=c^2\)的时候,就是直角三角形,那么也学过\(a^2+b^2>c^2\)是钝角三角形,反之,是锐角三角形

#include <stdio.h>
#include <math.h>

int main () {
	int a, b, c;//读入
	scanf("%d%d%d", &a, &b, &c);
	int tmp;
	if (a < b) {//这里主要是进行排序,abc要非递增的顺序进行排序
		tmp = a;
		a = b;
		b = tmp;
	}
	if (a < c) {
		tmp = a;
		a = c;
		c = tmp;
	}
	
	int res1 = a * a, res2 = c * c + b * b;
	if (res1 > res2) {
		puts("FUTURE");
	}
	else if (res1 < res2) {
		puts("PAST");
	}
	else puts("PRESENT");
}

good number

其实就是求一个数字\(n\)的全部约数,然后进行判断就可以了
但是这里需要一些数学知识,对于一个数字\(n\),可以直接枚举\(1\)\(n\)进行判断是否是\(n\)的约数,但是我们注意到当\(a \times b=n\)的时候,枚举到\(a\)的时候,\(b\)就是\(\frac{n}{a}\)那么这个数字也是\(n\)的约数,同时注意到如果\(a \times a=n\)的时候,\(a\)最大的数字就是\(\sqrt{n}\) 所以说枚举到\(\sqrt{n}\)就可以了,这个就是\(i \times i<=n\) 的约束条件,但是\(i \times i\)\(i\)很大的时候就会爆\(int\),所以这里我们把\(i\)移动到\(n\)这一旁边,于是就是\(i \times i \leq n\) \(\to\) \(i \leq \frac{n}{i}\),,同时这里\(\sqrt{n}\)其实是一个约数,所以这里还要帕判断一下,\(i \ne \frac{n}{i}\)

int main() 
{
    int n;
    scanf("%d", &n);
    int sum = 0;
    for (int i = 1; i <= n / i; i++) 
    {
        if (n % i == 0) 
        {
            if (i < n) sum += i;
            if (i != n / i && n / i < n) sum += n / i;
        }
    }
    if(sum==n) printf("yes\n");
    else printf("no\n")
}

简单求和问题

某位学长出的题,本来还想卡卡long long ,但是后来并没有卡,这里直接开long long 一相加就可以了

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    long long ans=0;
    for(int i=0;i<2*n;i++)
    {
        long long x;
        scanf("%lld",&x);
        ans+=x;
    }
    printf("%lld\n",ans);
}

scz的简单函数题

题解如图

#include <stdio.h>
#define N 1000010
long long f[N];//数值很大,要开long long
int main()
{
   int n;
   scanf("%d",&n);
   f[0]=0;
   f[1]=1;
   for(int i=2;i<=n;i++)
   {
       if(i%2==0) f[i]=f[i/2];
       else f[i]=f[(i-1)/2]+f[i-2];
   }
   long long ans=0;
   for(int i=1;i<=n;i++) ans+=f[i];
   printf("%lld\n",ans);
}

llw和mez的不烫手山芋

小型博弈的问题,但是这个可以通过举例来模拟出来,这里假设就是\(A和B\)一起玩博弈,如果说

\(n=1\)的时候,就是A赢,
\(n==2\)的时候,A赢
\(n==3\)的时候,B赢,因为A不管拿1或者2个,B都可以直接拿完

这里发现当一个数字能够变成\(3\)的时候,这个时候不管取\(1\)还是\(2\),我们都可以赢,那么如果我们是4,是否我们也是赢了? 以为我们拿\(1\)让他变成\(3\)这个状态同理,\(5\)的时候,我们就可以拿2 还是让让变成\(3\)这个状态,但是我们我们是\(6\)的时候,对方都可以变化使我们变成\(3\)这个状态,然后结果就反过来了,于是我们可以推出:对于\(n \mod 3==0\),A赢,反着,B赢 注意这里题目要求反过来了,反着就可以了.

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    if(n%3==0)
        printf("llwloser");
    else 
        printf("llwyyds");
}

hjl在稻妻的奇妙冒险

模拟题,注意点细节就可以了~~

#include<stdio.h>
int main()
{
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    if(a==b&&b==c&&c==d)
    {
        printf("yes");
        return 0;
    }
    else
    {
        int aa,bb,cc,dd;

        //攻击第一个方块
        aa=a,bb=b,cc=c,dd=d;
        aa++;
        if(aa>3) aa-=3;
        bb++;
        if(bb>3) bb-=3;
        if(aa==bb&&bb==cc&&cc==dd)
        {
            printf("yes");
            return 0;
        }

        //2
        aa=a,bb=b,cc=c,dd=d;
        aa++;
        if(aa>3) aa-=3;
        bb++;
        if(bb>3) bb-=3;
        cc++;
        if(cc>3) cc-=3;
        if(aa==bb&&bb==cc&&cc==dd)
        {
            printf("yes");
            return 0;
        }

        //3
        aa=a,bb=b,cc=c,dd=d;
        dd++;
        if(dd>3) dd-=3;
        bb++;
        if(bb>3) bb-=3;
        cc++;
        if(cc>3) cc-=3;
        if(aa==bb&&bb==cc&&cc==dd)
        {
            printf("yes");
            return 0;
        }

        //4
        aa=a,bb=b,cc=c,dd=d;
        dd++;
        if(dd>3) dd-=3;
        cc++;
        if(cc>3) cc-=3;
        if(aa==bb&&bb==cc&&cc==dd)
        {
            printf("yes");
            return 0;
        }
    }
    printf("no");
}

有关acm可好玩了(6) 题解的更多相关文章

  1. NEUQ-acm 预备队训练Week4—BFS/DFS - 2

    1.深度优先搜索(DFS)深度优先遍历主要思路是从图中一个未访问的顶点V开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成。例题P1605迷宫题目描述给定一个N×MN\timesMN×M方格的迷宫,迷宫里有TTT处障碍,障碍处不可通过。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。输入格式第一行为三个正整数N,M,TN,M,TN,M,T,分别表示迷宫的长宽和障碍总数。第二行为四个正整数SX,S

  2. 【算法题解】20. 两数之和 - 2

    这是一道简单题题目来自:https://leetcode.cn/problems/two-sum/题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。提示:22nums.length104−109−109nums[i]109−109−109target109只会存在一个有效答案进阶:你可以想出一个时间复杂度小于O(n2)O(n^2)O(n2)的算法吗?示例1:输入:nums=[2,7,11,15],targe

  3. 蓝桥杯第十四届省赛完整题解 C/C++ B组 - 2

    没有测评,不知道对不对,仅仅过样例而已试题A:日期统计本题总分:5分【问题描述】小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素从左至右如下所示:5686916124919823647759503875815861830379270588570991944686338516346707827689565614010094809128502533现在他想要从这个数组中寻找一些满足以下条件的子序列:   1.子序列的长度为8;   2.这个子序列可以按照下标顺序组成一个yyyymmdd格式的日期,并且要求这个日期是2023年中的某一天的日期,例如202309

  4. 2023第十四届蓝桥杯C/C++B组省赛题解 - 2

    2023蓝桥C/C++B组省赛文章目录2023蓝桥C/C++B组省赛试题A:日期统计题目描述枚举参考代码试题B:01串的熵题目描述枚举|模拟参考代码试题C:冶炼金属题意描述取交集参考代码试题D:飞机降落题意描述DFS+剪枝,懒得写试题E:接龙数列题意描述DP参考代码试题F:岛屿个数题意描述dfs|连通块参考代码试题G:子串简写题意描述前缀和参考代码试题H:整数删除题意描述双向链表|最小堆参考代码试题I:景区导游题意描述带权LCA参考代码试题J:砍树题意描述树上差分参考代码试题A:日期统计题目描述【问题描述】小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素

  5. go - crypto/autocert 包停止工作,永远挂起等待 acme 挑战 - 2

    我一直依赖这个库有一段时间了,没有任何问题,但突然间它完全忽略了缓存的证书,尝试获取新证书,但它只是永远等待显然永远不会出现的acme挑战。据我所知,我的用法是完全正确的(这在过去几周内一直有效,没有问题):certManager:=autocert.Manager{Prompt:autocert.AcceptTOS,HostPolicy:autocert.HostWhitelist("example.com"),Cache:autocert.DirCache("certs"),}c1:=make(chanerror)gofunc(){err:=http.ListenAndServe(

  6. LeetCode——链表简单题题解 - 2

    83.删除排序链表中的重复元素题目描述给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。输入:head=[1,1,2]输出:[1,2]解题思路:用一个指向节点类型的指针保存头结点,用另一个指向节点类型的指针对该链表进行遍历,由于是有序的,当出现不同的值就说明不会再出现跟前面的值相同的节点了,最后循环结束的条件是遍历到最后一个节点的时候,也就是该节点的next指向空的时候,停止循环,返回该保存的头结点,另外,如果传过来的头结点是空,则直接返回空。参考代码:/***Definitionforsingly-linkedlist.*structListNod

  7. NEUQ week 12 题解 - 2

    P1776宝物筛选宝物筛选题目描述终于,破解了千年的难题。小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物。这下小FF可发财了,嘎嘎。但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物。看来小FF只能含泪舍弃其中的一部分宝物了。小FF对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小FF有一个最大载重为WWW的采集车,洞穴里总共有nnn种宝物,每种宝物的价值为viv_ivi​,重量为wiw_iwi​,每种宝物有mim_imi​件。小FF希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。输入

  8. 2023第十四届蓝桥杯 C/C++大学生A组省赛 满分题解 - 2

    写在前面以下代码,目前均可通过民间OJ数据(dotcpp&NewOnlineJudge),两个OJ题目互补,能构成全集,可以到对应链接下搜题提交(感谢OJ对题目的支持)如果发现任何问题,包含但不限于算法思路出错、OJ数据弱算法实际超时、存在没考虑到的边界情况等,请及时联系作者​​题解A.幸运数(模拟)题面​题解 由于是填空题,按题意本地暴力,几秒就跑出来结果了,直接交结果代码#includeusingnamespacestd;intans;intmain(){ /* for(inti=1;iB.有奖问答(搜索/dp)题面​题解1.搜索:2的30次方种可能,每次要么+10要么清零,遇到100分时

  9. 【独家】华为OD机试提供C语言题解 - 箱子之形摆放 - 2

    最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理已参加机试人员的实战技巧文章目录最近更新的博客使用说明箱子之形摆放题目输入输出示例一输入输出说明备注Code

  10. 华为机试(6.17笔试题解析) - 2

    华为机试一共三道题,分值分别是100,100,200,满分400分,限时2.5小时。我抽到的这三题相对来说比较简单,满分通过,这里做个总结:第一题:数据分类■ 题目描述 对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。比如一个数据a=0x01010101,b=3,按照分类方法计算(0x01+0x01+0x01+0x01)%3=1,所以如果c=2,则此a为有效类型,其类型为1,如果c=1,则此a为无效类型;又如一个数据a=0x01

随机推荐