《信息学奥赛一本通 编程启蒙 C++版》 3441-3450(8题)

1、3441:【例77.2】经验值

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

洛谷P1867_Mc生存经验值_入门难度_模拟

洛谷P1867_Mc生存经验值_入门难度_模拟_哔哩哔哩_bilibili

P1867 【Mc生存】经验值 C++

P1867 【Mc生存】经验值 C++_PlateArmour_Man的博客-CSDN博客

洛谷题解 P1867 【【Mc生存】经验值】

洛谷题解 P1867 【【Mc生存】经验值】_洛谷p1867测试数据-CSDN博客

洛谷P1867 【Mc生存】经验值

https://shuiwa-coding.blog.csdn.net/article/details/113813991

/*
3441:【例77.2】经验值
http://bas.ssoier.cn:8086/problem_show.php?pid=3441
*/
#include <bits/stdc++.h>
using namespace std;
int n,a[100005],p[100005],pre[100005],nxt[100005],x,L,r;
long long sum;
int main( void )
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		a[i]=x;
		p[x]=i;
		pre[i]=i-1;
		nxt[i]=i+1;
	}
	nxt[0]=1;
	pre[n+1]=n;
	
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		L=pre[p[x]];
		r=nxt[p[x]];
		sum+=a[L]+a[r];
		nxt[L]=r;
		pre[r]=L;
	}
	cout<<sum<<endl;

	return 0;
}



2、3442:练77.1 队列复原

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

“队列复原”问题

“队列复原”问题-CSDN博客

队列复原2

队列复原2-CSDN博客

51Nod 2159 队列复原2 c/c++题解

51Nod 2159 队列复原2 c/c++题解-CSDN博客

网易有道编程题:恢复队列(C++)

网易有道编程题:恢复队列(C++)-CSDN博客

51nod 冲刺题

51nod 冲刺题_51nod 合法括号序列v2_Alaso_shuang的博客-CSDN博客

“队列复原”问题

“队列复原”问题-CSDN博客

#include <iostream>
using namespace std;

int a[100000];
int b[100000];

int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i ++){
		int c, d;
		cin >> c >> d;
		a[d] = c;
	}
	int index = 0;
	for(int i = 0; i < n; i ++){
		b[i] = a[index];
		index = a[index];
	}
	for(int i = n - 1; i >= 0; i --){
		cout << b[i] << endl;
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
struct node {
    int n, p;
} l[100005];
int m, a, b;
int main() {
    scanf("%d",&m);
	//cin >> m;
    for (int i = 1; i <= m; i++) {
        cin >> a >> b;
        l[a].n = b;
        l[b].p = a;
    }
    int head = 0;
    for (int i = 1; i <= m; i++) {
        if (l[i].p == 0) {
            head = i;
        }
    }
    for (int o = head; o != 0; o = l[o].n) {
        printf("%d\n",o);
		//cout << o << endl;
    }
    return 0;
}

/*
3442:练77.1 队列复原
http://bas.ssoier.cn:8086/problem_show.php?pid=3442
*/
#include <bits/stdc++.h>
using namespace std;

int a[100000+10],b[100000+10];
int main( void )
{
	int n,x,y,nn,m;
	
	cin>>n;
	
	m=n;
	
	while( m--){
		cin>>x>>y;
		a[y]=x;
		if( y==0 )
		{
			b[n]=x;
		}
	}
	nn=n;
	while( nn--)
	{
		b[nn]=a[b[nn+1]];
	}
	for(int i=1;i<=n;i++)
	{
		cout<<b[i]<<'\n';
	}
	return 0;
}



3、3443:【例78.1】忽明忽暗

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

2019 蓝桥杯省赛 A 组模拟赛(一)-忽明忽暗

2019 蓝桥杯省赛 A 组模拟赛(一)-忽明忽暗-CSDN博客

#include<bits/stdc++.h>
using namespace std;
const long long  mod=1e9+7;
long long ans,n;
int main()
{
    scanf("%lld",&n);
    long long t=sqrt(n);
    ans=t*(t+1)/2;
    if(ans%3==0)
    ans=(ans/3)%mod*(2*t+1)%mod;
    else
    ans=(ans%mod*((2*t+1)/3)%mod)%mod;
    cout<<ans<<endl; 
    return 0;
}



4、3444:【例78.2】大整数加法

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

[例 78.2] 大整数加法

1168:大整数加法

信息学奥赛一本通(C++版)在线评测系统

1168:大整数加法

1168:大整数加法_哔哩哔哩_bilibili

C++信息学奥赛OJ讲解:1168:大整数加法(高精度加法)

C++信息学奥赛OJ讲解:1168:大整数加法(高精度加法)_哔哩哔哩_bilibili

1168:大整数加法

1168:大整数加法_哔哩哔哩_bilibili

大整数加法(信息学奥赛一本通-T1168)

大整数加法(信息学奥赛一本通-T1168)_哔哩哔哩_bilibili

/*
1168:大整数加法
http://ybt.ssoier.cn:8088/problem_show.php?pid=1168

P1601 A+B Problem(高精)
https://www.luogu.com.cn/problem/P1601

1.6编程基础之一维数组 10:大整数加法
http://noi.openjudge.cn/ch0106/10/
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <bits/stdc++.h> 
using namespace std;
int main( void )
{
	//char a1[300],b1[300];
	
	string a1,b1;
	
	int a[300],b[300],c[300],lena,lenb,lenc,i,x;
	
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	
	//输入加数与被加数
	//gets(a1);
	//gets(b1);
	
	cin>>a1;
	cin>>b1;
	                                         
	lena=a1.length();
	lenb=b1.length();
	
	//将输入字符串倒置
	//加数放入a数组 
	for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;    
	/*
	//加数放入a数组
	for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-'0';    
	*/
	
	//加数放入b数组
	for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;    
	
	lenc =1;
	x=0;
	while ( lenc <=lena || lenc <=lenb )
	{
		//两数相加
		c[lenc]=a[lenc]+b[lenc]+x;     
		x=c[lenc]/10;
		c[lenc]%=10;
	    lenc++;
	}
	c[lenc]=x; 
	
	//去掉多余的0
	while(c[lenc]==0 && lenc>1)   
	{
		lenc--;
	}
	/*
	//处理最高进位
	if (c[lenc]==0)
		lenc--;                                    
	*/
	
	//输出结果
	for (i=lenc;i>=1;i--) 
		cout<<c[i];                            
	
	cout<<endl;
	
	return 0;
}

/*
1.6编程基础之一维数组 10大整数加法(AC)-2022.08.11 运算符重载 
http://noi.openjudge.cn/ch0106/10/
*/
#include <algorithm>
#include <iostream>
#include <cstring>
#include <sstream>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <cctype>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
const int maxn=201;
struct bignumber
{
	int len,s[maxn];
	bignumber(){memset(s,0,sizeof(s));len=1;}
	bignumber operator = (const char* num)
{
	len=strlen(num);
	for(int i=0;i<len;i++)s[i]=num[len-i-1]-'0';
	return *this;
}
bignumber operator = (const int num)
{
	char a[maxn];
	sprintf(a,"%d",num);
	*this=a;
	return *this;
}
bignumber (const int num){*this=num;}
bignumber (const char* num){*this=num;}
bignumber operator+(const bignumber& a)
{
	bignumber c;
	c.len=max(len,a.len)+1;
	for(int i=0,x=0;i<c.len;i++)
	{
		c.s[i]=s[i]+a.s[i]+x;
		x=c.s[i]/10;
		c.s[i]=c.s[i]%10;
	}
	while(c.s[c.len-1]==0&&c.len>1)c.len--;
	return c;
}
bool operator < (const bignumber& x)const
{
	if(len!=x.len)return len<x.len;
	for(int i=len-1;i>=0;i--)if(s[i]!=x.s[i])return s[i]<x.s[i];
	return false;
}
};
ostream& operator<<(ostream& out,const bignumber &x)
{
	for(int i=x.len-1;i>=0;i--)cout<<x.s[i];
	return out;
}
istream& operator>>(istream& in,bignumber &x)
{
	char num[maxn];
	in>>num;
	x=num;
	return in;
}
bignumber a,b;
int main()
{
	ios::sync_with_stdio(false);
	cin>>a>>b;
	cout<<a+b<<endl;
	return 0;
}



5、3445:【例78.3】回文数(Noip1999)

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

[例78.3] 回文数

1309:【例1.6】回文数(Noip1999)

信息学奥赛一本通(C++版)在线评测系统

洛谷——P1015 [NOIP1999 普及组] 回文数

洛谷——P1015 [NOIP1999 普及组] 回文数_哔哩哔哩_bilibili

1083 - 回文数

1083 - 回文数_哔哩哔哩_bilibili

NOIP1999普及组_回文数_高精_普及减难度

NOIP1999普及组_回文数_高精_普及减难度_哔哩哔哩_bilibili

CSP-J2-W1 P1015 [NOIP1999 普及组] 回文数

CSP-J2-W1 P1015 [NOIP1999 普及组] 回文数_哔哩哔哩_bilibili

P1015 [NOIP1999 普及组] 回文数

P1015 [NOIP1999 普及组] 回文数_哔哩哔哩_bilibili

/*
1309:【例1.6】回文数(Noip1999)-AC
http://ybt.ssoier.cn:8088/problem_show.php?pid=1309
*/
#include<iostream>
#include<cstring>
using namespace std;
int n,a[101],b[101],ans,i;

 //将数串s转化为整数数组a
void init(int a[])                                 
{ 
	string s; 
  	//n进制 读入字符串s  
	cin>>n>>s;                                   
  	
	//数组a清0   
	memset(a,0,sizeof(a));                 
  	
	//用a[0]计算字符串s的位数
	a[0]=s.length();                              
  	for(i=1;i<=a[0];i++)
    if(s[a[0]-i]>='0'&&s[a[0]-i]<='9')     
	{
		a[i]=s[a[0]-i]-'0';
	}
    else                                   
	{
		a[i]=s[a[0]-i]-'A'+10;
	}
}

//判别整数数组a是否为回文数
bool check(int a[])                           
{ 
	for(i=1;i<=a[0];i++)
    		if(a[i]!=a[a[0]-i+1])
			{
				return false;
			}
  	return true;
}

//整数数组a与其反序数b进行n进制加法运算
void  jia(int a[])                    
{
	 for(int i=1;i<=a[0];i++)b[i]=a[a[0]-i+1];      //反序数b
	 for(int i=1;i<=a[0];i++) a[i]+=b[i];              //逐位相加
	 
	//处理进位
	for(int i=1;i<=a[0];i++)                             
	{
	 	a[i+1]+=a[i]/n;
		a[i]%=n;
	} 
	
	//修正新的a的位数(a+b最多只能的一个进位)
	//最高进位 
	if( a[a[0]+1]>0 ) a[0]++;     
}
int main( void )
{	 
	init(a);
	if(check(a))
	{
		cout<<0<<endl;
		return 0;
	}
	
	//步数初始化为0
	ans=0;                                              
	while(ans++<=30)
	{       
		jia(a);
	 	if( check(a) )
		{
			cout<<ans<<endl;
			return 0;
		}
	}
	//输出无解信息
	cout<<"Impossible";                          
	return 0;
}



6、3446:练78.1 高精度乘法

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

练 78.1 高精度乘法

1307:【例1.3】高精度乘法

信息学奥赛一本通(C++版)在线评测系统

高精度乘法(信息学奥赛一本通-T1307)

高精度乘法(信息学奥赛一本通-T1307)_哔哩哔哩_bilibili

高精度乘法(信息学奥赛一本通-T1307)

高精度乘法(信息学奥赛一本通-T1307)_哔哩哔哩_bilibili

《信息学奥赛一本通》题解_1307_【例1.3】高精度乘法

《信息学奥赛一本通》题解_1307_【例1.3】高精度乘法_哔哩哔哩_bilibili

/*
【例3】高精度乘法。输入两个正整数,求它们的积。
http://ybt.ssoier.cn:8088/problem_show.php?pid=1307

1.13编程基础之综合应用 09:大整数乘法
http://noi.openjudge.cn/ch0113/09/

10000的阶乘有多少位
https://zhidao.baidu.com/question/1436524189976524579.html
https://zhidao.baidu.com/question/694151540079539764.html
https://www.zybang.com/question/ca5656a12b448dcf825e5942badf98bc.html
https://blog.csdn.net/s8848/article/details/43602301/

10000!末尾有几个0?
https://www.zybang.com/question/422e4932aeca5e039da80a7c05e1e08b.html
高精度乘法的参考程序:
*/
#include<iostream>
#include<cstring>
#include<cstdio>
char a1[1001],b1[1001];
//string a,b,c;
int a[1001],b[1001],c[1001];
using namespace std;
int main( void )
{
    int lena,lenb,lenc,i,j,x;
    
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    
	cin>>a1>>b1;
    //gets(a1);
    //gets(b1);
    
	lena=strlen(a1);  
    lenb=strlen(b1);
    
	//123 321
	for (i=0;i<=lena-1;i++)   
	{
		a[lena-i]=a1[i]-48;
		//a[lena-i]=a1[i]-'0';
	}
    
	for (i=0;i<=lenb-1;i++)   
	{
		b[lenb-i]=b1[i]-48;//'0'
	}
	
	for (i=1;i<=lena;i++)
	{
		//用于存放进位
	    x=0;                                               
		//对乘数的每一位进行处理
		for (j=1;j<=lenb;j++)                     
	    {
		   //当前乘积+上次乘积进位+原数
		   c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; 
		   x=c[i+j-1]/10;
		   c[i+j-1]%=10;
	    } 
	    
		//进位
		c[i+lenb]=x;                                  
	}
	
	lenc=lena+lenb;
	
	//删除前导0
	while (c[lenc]==0 && lenc>1) 
	{
		lenc--;
	}      
		
	for (i=lenc;i>=1;i--)
	{
		cout<<c[i];
	}	
	//cout<<endl;
	
	return 0;
}



7、3447:练78.2 大整数减法

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

练 78.2 大整数减法

1169:大整数减法

信息学奥赛一本通(C++版)在线评测系统

C++信息学奥赛OJ讲解:1169:大整数减法(NOI1.6.11)

C++信息学奥赛OJ讲解:1169:大整数减法(NOI1.6.11)_哔哩哔哩_bilibili

信息学奥赛 1169-大整数减法

信息学奥赛 1169-大整数减法_哔哩哔哩_bilibili

1169:大整数减法

1169:大整数减法_哔哩哔哩_bilibili

1169:大整数减法

1169:大整数减法_哔哩哔哩_bilibili

大整数减法(信息学奥赛一本通-T1169)

大整数减法(信息学奥赛一本通-T1169)_哔哩哔哩_bilibili

/*
1.6编程基础之一维数组 11 大整数减法 方法一 
http://noi.openjudge.cn/ch0106/11/

1169:大整数减法
http://ybt.ssoier.cn:8088/problem_show.php?pid=1169
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	string a1,b1;
	//char a1[300],b1[300];
  	int a[300],b[300],c[300],lena,lenb,lenc,i,x;
  	memset(a,0,sizeof(a));
  	memset(b,0,sizeof(b));
  	memset(c,0,sizeof(c));
  	
	cin>>a1>>b1;  
	//gets(a1);
 	//gets(b1);    //输入加数与被加数
  	lena=a1.size();
  	lenb=b1.size();
  	
	for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-'0';   //加数放入a数组
	for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;    //加数放入b数组
  	
	
	i=1;
	while (i<=lena||i<=lenb)
	{
		if (a[i]<b[i])
		{
			a[i]+=10;      //不够减,那么向高位借1当10
			a[i+1]--;
		}
		c[i]=a[i]-b[i];   //对应位相减
		i++;
	}
	lenc=i;
	while ((c[lenc]==0)&&(lenc>1)) lenc--;   //最高位的0不输出    
	for (i=lenc;i>=1;i--) cout<<c[i];               //输出结果
	cout<<endl;

	return 0;
}
/*
NOI / 1.6编程基础之一维数组
11大整数减法 2021.11.28 AC
http://noi.openjudge.cn/ch0106/solution/31681163/
*/
#include <bits/stdc++.h>
#include <algorithm>
#include <string>
using namespace std;
int res[20000];
int ada[20000],adb[20000];
int to_Int(char a)
{
    return a-'0';
}
int main()
{
    string a,b;
    int index=0;
    cin>>a>>b;
    int start=max(a.length(),b.length());
    for(int i=a.length()-1,j=0;i>=0;--i,++j)ada[j]=to_Int(a[i]);
    for(int i=b.length()-1,j=0;i>=0;--i,++j)adb[j]=to_Int(b[i]);
     
    for(int i=0;i<start;++i,++index)
    {
        res[index]=ada[i]-adb[i];
        if(res[index]<0)
        {
            int indexa=i;
            res[index]+=10;indexa++;
            ada[indexa]--;
            while(ada[indexa]<0)
            {
                ada[indexa]+=10;
                indexa++;
                ada[indexa]--;
            }
        }
    }
    int i,flag=1;
    for(i=index;res[i]==0;--i);
    for(;i>=0;--i)
    {
        cout<<res[i];flag=0;
    }
    if(i<0&&flag)cout<<0;
    return 0;
}



8、3450:【例81.1】 计算(a+b)/c的值

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

[例 81.1] 计算(a+b)/c 的值

1008:计算(a+b)/c的值

信息学奥赛一本通(C++版)在线评测系统

信息学奥赛一本通 第二章 1008 计算(a+b)/c的值

信息学奥赛一本通 第二章 1008 计算(a+b)/c的值_哔哩哔哩_bilibili

第二章 1008 计算(a+b)/c的值

第二章 1008 计算(a+b)/c的值_哔哩哔哩_bilibili

1008 计算(a+b)/c的值 信息学奥赛 1008 信息学奥赛一本通解题 第一部分C++语言基础部分_哔哩哔哩_bilibili

1008:计算(a+b)c的值

1008:计算(a+b)c的值_哔哩哔哩_bilibili

《信息学奥赛一本通》题解_1008_计算(a+b)除以c的值_哔哩哔哩_bilibili

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c;
    
    cin>>a>>b>>c;
    
	if( c==0)
    {
    	cout<<"Division by zero condition"<<endl;
	}
	else
	{
		cout<<(a+b)/c;
	}
	
    return 0;
}


scratch3代码:

 



 










1、啊哈编程星球

啊哈编程星球!编程学习从这开始~

适用于:编程初学者、小学一至三年级

2、慧通教育

慧通教育

适用于:编程初学者、小学生编程入门

3、《信息学奥赛一本通 编程启蒙》C++版

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

适用于:编程初学者、小学生编程启蒙

争取在小学1-4年级就将2、3两个题库的全部或大部分题 做完

为进一步深入学习信奥打好坚实的基础

4、信息学奥赛一本通

信息学奥赛一本通(C++版)在线评测系统

5、洛谷

https://www.luogu.com.cn/

洛谷题单广场

题单列表 - 洛谷

6、AcWing

AcWing

7、编程魔法师

编程魔法师

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dllglvzhenfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值