oj

杭电OJ 1057(C )

夙愿已清 提交于 2019-12-02 09:13:10
本题比较基础,只是理解题意比较困难。 首先输入繁殖天数,即测试用例的个数; 然后输入每天的繁殖次数,每天繁殖这么多次后,得到结果矩阵; 然后输入一个数组D,代表每次繁殖的变换规则; 最后输入初始种群矩阵。 #include <iostream> using namespace std; int main() { int day; //天数 cin >> day; while (day--) { int num; //繁殖次数 cin >> num; int D[16]; int input[22][22], output[22][22]; memset(input, 0, sizeof(input)); memset(output, 0, sizeof(output)); for (int i = 0; i < 16; i++) { cin >> D[i]; //变换规则 } for (int i = 1; i <= 20; i++) { for (int j = 1; j <= 20; j++) { cin >> input[i][j]; //初始种群 } } while (num--) { for (int i = 1; i <= 20; i++) { for (int j = 1; j <= 20; j++) { output[i][j] = input[i][j] + D

南邮 OJ 1730 数字金字塔

半腔热情 提交于 2019-12-02 06:57:11
数字金字塔 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 116 测试通过 : 41 比赛描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大 输入 多组输入数据 第一个行包含 R(1<= R<=1000) ,表示行的数目。 后面每行为这个数字金字塔特定行包含的整数。 所有的被供应的整数是非负的且不大于100。 输出 单独的一行,包含那个可能得到的最大的和。 样例输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 样例输出 30 提示 undefined 题目来源 ym #include<iostream> using namespace std; int main(){ int i,j,k,n; int a[1000],b[1000]; while(cin>>n){ //cin>>a[0]; scanf("%d",&a[0]); for(i=2;i<=n;i++){ for(j=0;j<i;j++){ //cin>>b[j]; scanf("%d",&b[j]);

oj随笔

我只是一个虾纸丫 提交于 2019-12-02 02:49:50
感觉自己绝对是一个弟弟,啥都看不明白。 10^50怎么可能用整形定义,字符串也是王道,介绍一种char转int的方法 sum+=table[i]-'0' 哈哈哈哈哈,我也看不明白,所以从百度上白嫖了一个说法: 应该是把字符型数据转换为整型,在ACSII码表中,字符‘0’的十进制值是48,假设有一个字符为‘0’,那么计算机识别出来的十进制值是48,而不是0。所以可以通过问题上的公式可以把字符型的0转化为整型的0。同理,可以把1到9的字符转换成整型的1到9,看一下ASCII码表就懂了,不难的。通俗来讲就是一个数据类型的转换,这种操作在单片机上的数据转换用得会比较多,但一般是反过来用,把十进制的整型数字转换成字符型数字,然后在一些显示设备上打印出来...... 总结一下,就是看ACSII码,其他的都是废话,附带一个样例 整数分类 Description 按照下面方法对整数 x 进行分类:如果 x 是一个个位数,则 x 属于 x 类;否则将 x 的各位上的数码累加,得到一个新的 x ,依次迭代,可以得到 x 的所属类。比如说 24 , 2+4=6 ,则 24 的类别数是 6 ; 39 , 3+9=12 , 1+2=3 ,则 39 的类别数是 3 。 输入 每行输入一个非负整数 n , n ≤ 10500 , n 为 0 时结束。 输出 每行输出对应整数的分类数。 #include

[OJ] Data Stream Median (Hard)

时间秒杀一切 提交于 2019-12-01 18:42:46
LintCode 81. Data Stream Median (Hard) 思路: 用一个大根堆保存较小的一半数, 一个小根堆保存较大的一半数. 每次根据 num 和两个堆顶的数据决定往哪个堆里面放. 放完后进行平衡确保两个堆的 size 差不超过1. 利用两个堆的 size 和堆顶值计算 median . 大根堆可以表示为 priority_queue<int, vector<int>, less<int>> , 其实 priority_queue<int> 默认就是大根堆. 小根堆可以表示为 priority_queue<int, vector<int>, greater<int>> . class Solution { public: vector<int> medianII(vector<int> &nums) { priority_queue<int, vector<int>, less<int>> sm; priority_queue<int, vector<int>, greater<int>> gt; vector<int> v; for (int n : nums) { if (gt.empty() || n > gt.top()) { gt.push(n); } else { sm.push(n); } if (sm.size() > gt.size() +

[OJ] Data Stream Median (Hard)

此生再无相见时 提交于 2019-12-01 18:35:43
LintCode 81. Data Stream Median (Hard) 思路: 用一个大根堆保存较小的一半数, 一个小根堆保存较大的一半数. 每次根据 num 和两个堆顶的数据决定往哪个堆里面放. 放完后进行平衡确保两个堆的 size 差不超过1. 利用两个堆的 size 和堆顶值计算 median . 大根堆可以表示为 priority_queue<int, vector<int>, less<int>> , 其实 priority_queue<int> 默认就是大根堆. 小根堆可以表示为 priority_queue<int, vector<int>, greater<int>> . class Solution { public: vector<int> medianII(vector<int> &nums) { priority_queue<int, vector<int>, less<int>> sm; priority_queue<int, vector<int>, greater<int>> gt; vector<int> v; for (int n : nums) { if (gt.empty() || n > gt.top()) { gt.push(n); } else { sm.push(n); } if (sm.size() > gt.size() +

Comet OJ - 2019国庆欢乐赛

前提是你 提交于 2019-12-01 13:28:35
https://www.cometoj.com/contest/68/problem/A enmmmm 看到 许多的 爆 ll 的老故事 #include<bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t,a,b,c,d; cin >> t; while(t--) { cin >> a >> b >> c >> d; if((a < 0 && c > 0) && (b < 0 && d > 0)) cout << "8\n"; else if((a < 0 && c > 0) || (b < 0 && d > 0)) cout << "6\n"; else cout << "5\n"; } return 0; } https://www.cometoj.com/contest/68/problem/ B 从小到大排个序 a1 a2 a3 a4 a5, 如果 sum-a5 <= a5 那么全部都是有缘人 结果为 sum-a5 否则 结果为 sum/2, 相当于贪心每次拿最大的俩个数减1直到和小于2 可用数学归纳法证明   if sum == 2 || 3, result = sum/2   假设 sum > 3 &&

Comet OJ - Contest #12 补题

那年仲夏 提交于 2019-12-01 12:49:48
A.Competitive Problem Setting 题意:比较多个字符串的前三位,如果全部不同则输出Yes 否则为 No. 思路:截取前三位,放入set中进行比较即可 #include <bits/stdc++.h> typedef long long ll; const int maxn = 1e5+7; using namespace std; string s,s1; set<string>ss; int main(){ int T; cin>>T; while(T--){ int n; cin>>n; ss.clear(); int flag = 0; for(int i=0;i<n;i++){ cin>>s; s1 = s.substr(0,3); if(flag==0&&ss.count(s1)){ flag = 1; } else ss.insert(s1); } if(flag) cout<<"No"<<endl; else cout<<"Yes"<<endl; } return 0; } View Code B.Binary Matrix Transform 来源: https://www.cnblogs.com/Tianwell/p/11686959.html

正睿OJ 比大小(卡特兰数或钩子公式)

南笙酒味 提交于 2019-12-01 12:28:54
满分做法: 由题,0和1的交界处把0,1分成两个矩阵,满足杨氏矩阵的性质,可以用钩子公式解决。对于给定形状,不同的杨氏矩阵的个数为:n!除以每个格子的钩子长度加1的积。其中钩子长度定义为该格子右边的格子数和它上边的格子数之和。 因为可以分开算,由打表可知一段的方案数就是长度的卡特兰数。 钩子公式 #include<cstring> #include<algorithm> #include<cmath> #include<iostream> #include<cstdio> using namespace std; typedef long long ll; const int maxm=2e5+7; const int mo=998244353; int n; char s[maxm]; ll inv[maxm]; ll sum[maxm]; ll ans=1; ll qpow(ll a,ll b) { ll ans=1,base=a; while(b) { if(b&1) ans=ans*base%mo; base=base*base%mo; b>>=1; } return ans; } int main() { scanf("%d",&n); inv[0]=1; for(int i=1;i<=2*n;i++) inv[i]=inv[i-1]*i%mo; sum[1]=2;

【OJ】html标记匹配

…衆ロ難τιáo~ 提交于 2019-12-01 07:14:42
题目内容: 实现扩展括号匹配算法,用来检查HTML文档的标记是否匹配。 HTML标记应该成对、嵌套出现, 开标记是<tag>这种形式,闭标记是</tag>这种形式。 输入格式: 共1行,为一个字符串,即一个HTML文档中的内容。 输出格式: 共1行,为True或者False,表示该字符串中的标记是否匹配。 输入样例: <html> <head> <title>Example</title> </head> <body> <h1>Hello, world</h1> </body> </html> 输出样例: True 1 #include <iostream> 2 #include <stack> 3 #include <string> 4 using namespace std; 5 int main(){ 6 stack<string> my_tag; 7 int sign = 0, flag = 0; 8 string my_html, tmp; 9 getline(cin, my_html); 10 for (int i = 0, j = 0; i < my_html.length(); ++i, ++j){ 11 if (my_html[i] == '<'){ 12 sign = i + 1; 13 j = 0; 14 if (my_html[sign] == '/')

【OJ】密码翻译

谁说我不能喝 提交于 2019-12-01 07:14:37
题目内容: 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。 输入格式: 第一行是字符串的数目n。 其余n行每行一个字符串。 输出格式: 输出每行字符串的加密字符串。 输入样例: 1 Hello! How are you! 输出样例: Ifmmp! Ipx bsf zpv! 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int main(){ 5 int n; 6 string str; 7 cin >> n; 8 cin.get(); 9 for (int i = 0; i < n; ++i){ 10 getline(cin, str); 11 for (int j = 0; j < str.length(); ++j){ 12 if ((str[j] < 'z' && str[j] >= 'a') || str[j] < 'Z' && str[j] >= 'A') 13 str[j] += 1; 14 else if (str[j] == 'z')