oj

百炼OJ - 1002 - 方便记忆的电话号码

匿名 (未验证) 提交于 2019-12-02 23:34:01
˼· 开个一千万的数组计数,最后遍历即可。 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int num=0; int mymap[10000000] = {0}; int change(char a[201]) { int j=0, result=0; for(int i=0;i<strlen(a);i++) { if(a[i] == '-') continue; if(a[i] <= '9' && a[i] >= '0') { result = result*10+a[i]-'0'; continue; } if( a[i] <= 'O' && a[i] >= 'A' ) { result = result*10+ (int)((a[i]-'A')/3) + 2; continue; } switch (a[i]) { case 'P': case 'R': case 'S': result = result*10+7; break; case 'T': case 'U': case 'V': result = result*10+8; break; case 'W': case 'X': case 'Y': result = result*10+9; break; }

Jarvis OJ - Login

匿名 (未验证) 提交于 2019-12-02 23:34:01
无聊的时候写了一道web 题目地址: Login 就不贴图了 太麻烦了… 就是让输入登陆密码 F12之后什么都没发现 抓包之后发现了一些东西 Hint: “select * from admin where password=’”.md5($pass,true)."’" 这是一个md5加密后的sql注入 md5(pass, true): 参数一是要加密的字符串; 参数二是输出格式: true,表示输出原始16字符二进制格式; false,默认,表示输出32字符十六进制数。 我们现在要找到一个以16字符二进制格式md5加密后,等于password。 于是输入:ffifdyop 至于为什么 http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes 咱也不知道 … 文章来源: https://blog.csdn.net/weixin_43464124/article/details/90348091

【小米oj】节约用电

匿名 (未验证) 提交于 2019-12-02 23:32:01
由于前面的只会影响后面而后面不能影响前面,所以顺着暴力修改就行了,时间复杂度nlog(n)。 1 #define mm(a) memset(a,0,sizeof(a)); 2 #define max(x,y) (x)>(y)?(x):(y) 3 #define min(x,y) (x)<(y)?(x):(y) 4 #define Fopen freopen("1.in","r",stdin); freopen("m.out","w",stdout); 5 #define rep(i,a,b) for(int i=(a);i<=(b);i++) 6 #define per(i,b,a) for(int i=(b);i>=(a);i--) 7 #include<bits/stdc++.h> 8 typedef long long ll; 9 #define PII pair<ll,ll> 10 using namespace std; 11 const int INF=0x3f3f3f3f; 12 const int MAXN=(int)2e5 + 5; 13 const ll mod=1e9+7; 14 15 int n,a[MAXN]; 16 char s[MAXN]; 17 int main() { 18 while(~scanf("%s",s+1)) { 19 n=strlen

【小米oj】 跳跳看

匿名 (未验证) 提交于 2019-12-02 23:32:01
1 #define mm(a) memset(a,0,sizeof(a)); 2 #define max(x,y) (x)>(y)?(x):(y) 3 #define min(x,y) (x)<(y)?(x):(y) 4 #define Fopen freopen("1.in","r",stdin); freopen("m.out","w",stdout); 5 #define rep(i,a,b) for(int i=(a);i<=(b);i++) 6 #define per(i,b,a) for(int i=(b);i>=(a);i--) 7 #include<bits/stdc++.h> 8 typedef long long ll; 9 #define PII pair<ll,ll> 10 using namespace std; 11 const int INF=0x3f3f3f3f; 12 const int MAXN=(int)2e5 + 5; 13 const ll mod=1e9+7; 14 15 16 string input,temp; 17 vector<int>v; 18 map<int,int>mp; 19 int n,dp[MAXN],m,x; 20 int main() { 21 memset(dp,INF,sizeof(dp)); 22 v

【小米oj】 dreamstart 的催促

匿名 (未验证) 提交于 2019-12-02 23:32:01
1 #define mm(a) memset(a,0,sizeof(a)); 2 #define max(x,y) (x)>(y)?(x):(y) 3 #define min(x,y) (x)<(y)?(x):(y) 4 #define Fopen freopen("1.in","r",stdin); freopen("m.out","w",stdout); 5 #define rep(i,a,b) for(int i=(a);i<=(b);i++) 6 #define per(i,b,a) for(int i=(b);i>=(a);i--) 7 #include<bits/stdc++.h> 8 typedef long long ll; 9 #define PII pair<ll,ll> 10 using namespace std; 11 const int INF=0x3f3f3f3f; 12 const int MAXN=(int)2e5 + 5; 13 const ll mod=10000019; 14 15 ll qpow(ll x,ll y,ll mod) { 16 ll ans=1; 17 while(y) { 18 if(y&1)ans=(x*ans)%mod; 19 x=(x*x)%mod; 20 y>>=1; 21 } 22 return ans; 23 }

【小米oj】 不一样的排序

匿名 (未验证) 提交于 2019-12-02 23:32:01
线性筛+sort 1 #define mm(a) memset(a,0,sizeof(a)); 2 #define max(x,y) (x)>(y)?(x):(y) 3 #define min(x,y) (x)<(y)?(x):(y) 4 #define Fopen freopen("1.in","r",stdin); freopen("m.out","w",stdout); 5 #define rep(i,a,b) for(int i=(a);i<=(b);i++) 6 #define per(i,b,a) for(int i=(b);i>=(a);i--) 7 #include<bits/stdc++.h> 8 typedef long long ll; 9 #define PII pair<ll,ll> 10 using namespace std; 11 const int INF=0x3f3f3f3f; 12 const int MAXN=(int)2e6 + 5; 13 14 struct node 15 { 16 int x; 17 int id; 18 int val; 19 }a[MAXN]; 20 bool vis[MAXN]; 21 int prime[MAXN]; 22 23 int t[MAXN],e[MAXN],n,k; 24 //geshu fuzhu

石子合并-OJ

我与影子孤独终老i 提交于 2019-12-02 20:36:07
石子合并(一) 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。 输入 有多组测试数据,输入到文件结束。 每组测试数据第一行有一个整数n,表示有n堆石子。 接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开 输出 输出总代价的最小值,占单独的一行 样例输入 3 1 2 3 7 13 7 8 16 21 4 18 样例输出 9 239 个人理解: 1.要想得到的总代价最小,则只需要将每个石子堆依次从小到大合并,这样得到的便是最小。 结果 时间 内存 语言 Accepted 208 404 c++ 代码: #include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int INF = 1 << 30; const int N = 205; int dp[N][N]; int sum[N]; int a[N]; int getMinval(int a[],int n) { for(int i=0;i<n;i++) dp[i]

OJ-石子合并问题

偶尔善良 提交于 2019-12-02 20:35:57
石子合并问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 对于给定n堆石子,计算合并成一堆的最小得分和最大得分。 Input 输入数据的第1行是正整数n,1≤n≤100,表示有n堆石子。第二行有n个数,分别表示每堆石子的个数。 Output 输出数据有两行,第1行中的数是最小得分,第2行中的数是最大得分。 Sample Input 4 4 4 5 9 Sample Output 43 54 #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; #define MAXN 100 int sum[MAXN]; int mins[MAXN][MAXN], maxs[MAXN][MAXN]; int INT_MAX=999999999; int n, stone[MAXN]; int sums(int i, int j) {

[Comet OJ - #13] [DQ] [并查集] B C

让人想犯罪 __ 提交于 2019-12-02 14:42:38
C 给定1000*1000的矩阵,每次将一个子矩阵内全部值赋值为1,问四联通块数量 Q 3e4 首先考虑复杂度,3e4次操作的合并暴力肯定不行,并且要考虑已经为1的块不应该再次考虑 1.考虑合并操作,对于一个0点,当他变为1对答案的影响只有几种情况 周边都是0,总联通联通块数量加1 周边有(1 - 4)个不同联通块,ans -= 不同联通块个数+1 对于相同的联通块通过当前0点合并没有意义,不用计算。 所以对于每个0点的合并可以快速计算并用并查集合并(映射下标) 2.然后考虑第二个问题,如何让每个0点只被操作一次 可以用并查集维护每行当前点的下一个0点,这样在区间上跳动速度飞快并且每次跳的都是0点 或者用set维护当前行内还有0的下标并操作erase(比并查集常数大) /* Zeolim - An AC a day keeps the bug away */ //#pragma GCC optimize(2) //#pragma GCC ("-W1,--stack=128000000") #include <bits/stdc++.h> using namespace std; #define mp(x, y) make_pair(x, y) #define fr(x, y, z) for(int x = y; x < z; ++x) #define pb(x) push_back

杭电OJ 1053(C )

倖福魔咒の 提交于 2019-12-02 09:13:14
本题实现哈夫曼编码,使用优先队列即可。 #include <iostream> #include <string> #include <queue> #include <functional> #include <iomanip> using namespace std; int num[30]; //各字符出现的次数 int sum; //哈夫曼编码总长度 priority_queue <int, vector<int>, greater<int>> q; //升序优先队列 void encode(); //实现哈夫曼编码 int main() { string str; while (cin >> str) { if (str == "END") break; sum = 0; memset(num, 0, sizeof(num)); while (!q.empty()) //将之前计算中队列剩余元素清空(只有一个元素时会剩余) q.pop(); for (int i = 0; i < str.length(); i++) { if (str[i] == '_') num[26]++; else num[str[i] - 'A']++; } for (int i = 0; i < 30; i++) { if (num[i] > 0) q.push(num[i]); /