oj

JZ初中OJ 2295. [noip普及组2]栈

对着背影说爱祢 提交于 2019-11-26 17:37:34
input: stack.in output: stack.out 时间限制: 1000 ms 空间限制: 524288 KB 具体限制 题目描述 输入 输出 样例输入 5 1 4 3 5 2 样例输出 1 2 4 3 5 数据范围限制 提示 依次使用操作 1、2、1、1、1、1、2、3、3、2 可以得到样例输出 1 2 4 3 5 。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 freopen("stack.in","r",stdin); 6 freopen("stack.out","w",stdout); 7 int n,a[110000],rm[110000],q[110000],l=1,r=0; 8 scanf("%d",&n); 9 rm[n+1]=100010; 10 for(int i=1;i<=n;++i) 11 scanf("%d",&a[i]); 12 for(int i=n;i;--i) 13 rm[i]=min(rm[i+1],a[i]); 14 for(int i=1;i<=n;++i){ 15 if(l<=r){ 16 if(a[q[l]]>rm[i]&&a[q[r]]>rm[i]){ 17 q[++r]=i; 18 continue; 19 } 20 while

JZ初中OJ 2298. [noip普及组2]异或

丶灬走出姿态 提交于 2019-11-26 17:34:30
input: gcdxor.in output: gcdxor.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述 SarvaTathagata是个神仙,一天他在研究数论时,书上有这么一个问题:求不超过n两两的数的gcd。 SarvaTathagata这么神仙的人当然觉得这个是sb题啦。学习之余,他还发现gcd的某一个特别好的性质:如果有两个数i,j满足gcd(i,j)=i^j(这里的^为c++中的异或)的话,那么这两个数组成的数对(i,j)就是一个nb的数对(这里认为(i,j)和(j,i)为相同的,并不需要计算2次)。 当然,SarvaTathagata并不会只满足于判断一个数对是否nb,他还想知道满足两个数都是不超过n并且nb的数对有多少个。 由于SarvaTathagata实在是太神仙了,他认为这种题实在是太简单了。于是他找到了你,看看你是否能解决这个问题。 输入 共一行一个整数n,含义如题所述。 输出 一行一个整数,表示nb的数对的个数。 样例输入 样例输入1 12 样例输入2 123456 样例输出 样例输出1 8 样例输出2 214394 数据范围限制 1 #include<stdio.h> 2 using namespace std; 3 int main() 4 { 5 freopen("gcdxor.in","r",stdin)

JZ高中OJ 1038. [SCOI2009]游戏

佐手、 提交于 2019-11-26 17:33:33
Time Limits: 1000 ms Memory Limits: 65536 KB Detailed Limits Description windy学会了一种游戏。 对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。 最开始windy把数字按顺序1,2,3,……,N写一排在纸上。 然后再在这一排下面写上它们对应的数字。 然后又在新的一排下面写上它们对应的数字。 如此反复,直到序列再次变为1,2,3,……,N。 如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6 windy的操作如下 1 2 3 4 5 6 2 3 1 5 4 6 3 1 2 4 5 6 12 3 5 4 6 2 3 1 4 5 6 3 1 2 5 4 6 1 2 3 4 5 6 这时,我们就有若干排1到N的排列,上例中有7排。 现在windy想知道,对于所有可能的对应关系,有多少种可能的排数。 Input 一个整数,N。 Output 一个整数,可能的排数。 Sample Input 3 Sample Output 3 Data Constraint Hint 100%的数据,满足 1 <= N <= 1000 。 1 #include<bits/stdc++.h> 2 using namespace std; 3 long long dp

JZ高中OJ 1035. [SCOI2009]粉刷匠

情到浓时终转凉″ 提交于 2019-11-26 17:33:24
Time Limits: 5000 ms Memory Limits: 65536 KB Detailed Limits Description windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。 Input 第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示红色,'1'表示蓝色。 Output 输出一个整数,表示最多能正确粉刷的格子数。 Sample Input 3 6 3 111111 000000 001100 Sample Output 16 Data Constraint Hint 100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。 1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int read() 4 { 5 int x=0;char ch=getchar(); 6 while(ch<'0'||ch>'9')ch=getchar(); 7 while(ch>='0'&

杭电OJ 1014(C++)

試著忘記壹切 提交于 2019-11-26 17:12:15
本题较为简单,计算出MOD个结果后,将其排序,然后一一对照即可。 #include <iostream> #include <algorithm> #include <iomanip> using namespace std; int main() { int STEP, MOD; while (cin >> STEP >> MOD) { bool flag = true; int seed[100005]; seed[0] = 0; for (int i = 1; i < MOD; i++) { seed[i] = (seed[i - 1] + STEP) % MOD; } sort(seed, seed + MOD); //对seed[0]至seed[MOD-1]排序 for (int i = 0; i < MOD; i++) { if (seed[i] != i) flag = false; } if (flag) cout << setw(10) << STEP << setw(10) << MOD << " Good Choice" << endl << endl; else cout << setw(10) << STEP << setw(10) << MOD << " Bad Choice" << endl << endl; } return 0; } 继续加油。

BUU OJ 做题记录

有些话、适合烂在心里 提交于 2019-11-26 11:32:42
buu oj题库的题质量很高,这里记录一下 1.WarmUp 代码审计 查看源码发现提示source.php和hint.php source.php <?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } if (in_array($page, $whitelist)) { return true; } $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return

JZ初中OJ 2293. [noip普及组1]深水旅店

那年仲夏 提交于 2019-11-26 09:15:58
input: hotel.in output: hotel.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述 一共有N个人在排队,他们都有自己的编号,保证编号大于0且小于2000001, 每个人都有自己前面和后面人的编号,如果他前面或后面没人,则会用 0 代替, 一共只有一条拿酒的队伍。 输入 第一行一个整数 N 表示人的个数 接下来 N 行表示每个人记下的编号 保证每个人的标号不同 输出 一行 N 个数,中间用空格隔开,表示这个编号。 样例输入 【样例输入 1】 4 92 31 0 7 31 0 7 141 【样例输入 2】 5 0 1 1 4 4 0 3 2 5 3 样例输出 【样例输出 1】 92 7 31 141 【样例输出 2】 5 1 3 4 2 数据范围限制 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=2100000; 4 bool sf[maxn]; 5 int n,x,y,a[maxn],all,next[maxn],last[maxn],first1,first2; 6 int main() 7 { 8 freopen("hotel.in","r",stdin); 9 freopen("hotel.out","w",stdout); 10

JZ初中OJ 2291. [noip普及组1]序列

ε祈祈猫儿з 提交于 2019-11-26 09:00:52
input: seq.in output: seq.out 时间限制: 1000 ms 空间限制: 524288 KB 具体限制 题目描述 有一个长度为n的序列A,其中有m个位置是1,其余位置全是0。你可以选择不超过k个区间,满足所有是1的位置都被至少一个区间覆盖。对于一个区间[l,r],我们定义它的长度为r-l+1,求满足条件的最小区间长度之和。 输入 第一行三个整数m,n,k,意义如上。 接下来m行,每行一个整数x,表示Ax是1。保证输入的x递增。 输出 输出一行一个整数,表示满足条件的最小区间长度之和。 样例输入 4 100 2 20 30 75 80 样例输出 17 数据范围限制 对于20%的数据,m,k≤10,n≤100; 对于50%的数据,m,k≤2000,n≤109; 对于100%的数据,m,k≤200000,n≤109。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int m,n,k,p,u=1,ans,now,last,c[200001]; 4 bool cmp(int x,int y) 5 { 6 return x<y; 7 } 8 int main() 9 { 10 freopen("seq.in","r",stdin); 11 freopen("seq.out","w",stdout); 12

JZ初中OJ 1566. [GDKOI]幸运锁

隐身守侯 提交于 2019-11-26 08:56:01
input: lucky.in output: lucky.out 时间限制: 2000 ms 空间限制: 256000 KB 具体限制 题目描述 有一把幸运锁,打开它将会给你带来好运,但开锁时需要输入一个正整数(没有前导0)。幸运锁有一种运算,对于一个正整数,返回他的相邻两位数字间的差,如1135,运算结果为22(会去掉前导0)。 现在已知只有经过反复运算最终结果为7的数才能打开这把锁,给你一个区间[a,b],问该区间中有多少个能打开幸运锁的幸运数。 输入 第一行两个整数a,b。 输出 一个整数K,表示共有多少个这样的数。 样例输入 1 10 样例输出 1 数据范围限制 【限制】 1<=a<=b<=10^9。 30%的数据有b<=10^6。 1 #include <bits/stdc++.h> 2 using namespace std; 3 int readint() { 4 int x = 0; 5 char c = getchar(); 6 for (; c < '0' || c > '9'; c = getchar()); 7 for (; c >= '0' && c <= '9'; c = getchar()) x = (x * 10) + (c - '0'); 8 return x; 9 } 10 long long toVal(string s) { 11 long

JZ初中OJ 1564. [GDKOI]旅游

萝らか妹 提交于 2019-11-26 08:49:51
时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述 输入N个数,从中选择一些出来计算出总和,问有多少种选法使得和为质数。 输入 第一行一个整数N。 第二行N个整数,表示这N个数的值。 输出 一个整数,表示方案数。 样例输入 4 1 1 2 7 样例输出 5 数据范围限制 提示 【样例解释】 一共有12种选法:(1,1,2,7),(1,2,7),(2,7),(1,1,7),(1,7),(7),(1,1,2),(1,2),(2),(1,1),(1)和(),其中(1,1,2,7),(7),(1,2),(1,1),(2)为5种正确选法。 【限制】 1<=N<=50。 每个数不超过10,000。 1 #include<bits/stdc++.h> 2 using namespace std; 3 struct s 4 { 5 long long b; 6 int g; 7 }a[100]; 8 bool cmd(s x,s y) 9 { 10 return x.b<x.b; 11 } 12 bool zs[600000],sf[10001]; 13 long long n,all,x,ans,maxn,f[510000]; 14 void zhishu() 15 { 16 for(int i=2;i<=600000;i++) 17 { 18 if(zs[i]==0