• [0418] 程序设计实训小结(更新1420)


    • 简易题解:
      • 1059 简单动规,注意用short储存map,int储存ans,否则TLE
      • 1083 使用getline(cin,str)读入一行字符串
      • 1099 注意对于不足4位的最大值/最小值的处理
      • 1110 数据有多组然而题目中并没有表明
      • 1116 可以使用STL库中reverse函数
      • 1119 使用strtol(num,*s,p)轻松转换进制。
        关联1145,1264
      • 1126 不能用STL函数偷懒
      • 1128关联1176
      • 1131 使用substr找出字串,reverse翻转,find查找
      • 1134,1244 数据太弱,unsigned long long 可破
      • 1139 关联1136,1140
      • 1148 数据其实有误,因为3200年不是闰年。
      • 1156 矩阵快速幂
      • 1195 ans=3*2^(n-1)-2;
      • 1282 先填左上角三角形,再填右下角三角形。
      • 1420
        • (106470=dbinom{15}{4}+dbinom{15}{5}*dbinom{5}{2}+dbinom{15}{6}*dbinom{6}{2}),这是我凑了1小时凑出来的结果,然后找不到一般规律。请教了数学大神得知这是传说中的Stirling Num,emmm,果然概统学不好的人连呼吸都是痛的吗??
        • (ans(n,m)=frac {1} {m!} cdot sum_{k=0}^m cdot (-1)^kcdot dbinom{m}{k}cdot (m-k)^n)
        • 注意使用高精度
        • Code:
    #include<bits/stdc++.h>
    using namespace std;
    //Stirling Num
    string mutiple(string a,string b) {
    	int ans[a.size()+b.size()+10]= {0};
    	for(int i=0; i<a.size(); ++i) {
    		for(int j=0; j<b.size(); ++j) {
    			ans[i+j+1]+=(a[i]-'0')*(b[j]-'0');
    		}
    	}
    	for(int i=a.size()+b.size()-1; i>0; --i) {
    		ans[i-1]+=ans[i]/10;
    		ans[i]%=10;
    	}
    	int i=0;
    	while(ans[i]==0)++i;
    	string ans2;
    	for(int j=i; j<a.size()+b.size(); ++j)ans2+=ans[j]+'0';
    	return ans2;
    }
    string add(string num1,string num2) {
    	vector<int>ans;
    	int i=num1.size(),j=num2.size(),t=0;
    	reverse(num1.begin(),num1.end());
    	reverse(num2.begin(),num2.end());
    	while(j<i) {
    		num2+='0';
    		j=num2.size();
    	}
    	while(i<j) {
    		num1+='0';
    		i=num1.size();
    	}
    	for(i=0; i<num1.size(); ++i)ans.push_back(num1[i]+num2[i]-'0'-'0');
    	for(i=0; i<ans.size()-1; ++i) {
    		if(ans[i]>=10) {
    			ans[i+1]+=1;
    			ans[i]-=10;
    		}
    	}
    	if(ans[ans.size()-1]>=10) {
    		ans[ans.size()-1]-=10;
    		ans.push_back(1);
    	}
    	reverse(ans.begin(),ans.end());
    	string ans2;
    	for(int i=0;i<ans.size();++i)ans2+=ans[i]+'0';
    	return ans2;
    }
    int main() {
    	int n,m;
    	string S[101000];
    	string S2[101];
    	S[0]="1";
    	for(int i=1; i<=100; ++i) {
    		S[i*100]="0";
    		S[i*100+i]="1";
    		for(int j=1; j<i; ++j){
    			int tmp=j;
    			string JJ;
    			while(tmp)
    			{
    				JJ+=tmp%10+'0';
    				tmp/=10;
    			}
    			reverse(JJ.begin(),JJ.end());
    			S[i*100+j]=add(S[(i-1)*100+j-1],mutiple(S[(i-1)*100+j],JJ));
    		}
    	}
    	while(cin>>n>>m) {
    		if (n<m)cout<<0<<endl;
    		else if(n==m)cout<<1<<endl;
    		else cout<<S[n*100+m]<<endl;
    	}
    	return 0;
    }
    
    • 代码Pack(将后缀名改为*.rar即可打开):
      • 制作图片压缩包:
        • 将image.jpg file.zip放到同一文件夹下
        • 新建文本文档,打开并输入"copy/b image.jpg+file.zip image2.jpg"
        • 新建文本文档.txt改名为1.bat
        • 双击运行1.bat
        • 演示GIF:
  • 相关阅读:
    关于Markdown
    20. 有效的括号(栈)
    数组队列
    MySql编码、卸载、启动问题
    循环队列
    链表实现与时间复杂度分析
    栈的应用和基本实现
    使用链表实现栈
    封装动态数组类Array
    Android平台的开发环境的发展演变
  • 原文地址:https://www.cnblogs.com/shy-/p/8877704.html
Copyright © 2020-2023  润新知