//纯粹乱写,所以代码很乱,注意几个特殊情况
//一种为0, 0000, 000000,都应该处理为有数字,且为0
//二种为000012344,应该处理为12344
//三种为123RED123456处理为123123456
//至于判断谁大谁小,大家应该都会做
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <bitset>
#include <map>
#include <sstream>
#include <unordered_set>
using namespace std;
const int MAXN = 1e3 + 5;
const int INF = 0x3f3f3f3f;
const int XX = 1e3 + 5;
int n;
char str[MAXN];
char nstr[MAXN];
string cur, maxs;
int main() {
while(~scanf("%s", str)) {
int len = strlen(str), lt = 0;
for(int i = 0; i < len; i ++) {
if(!isdigit(str[i]) && i + 2 < len && str[i] == 'R' && str[i + 1] == 'E' && str[i + 2] == 'D') {
i = i + 2;
} else if(!isdigit(str[i])) {
nstr[lt ++] = ' ';
} else {
nstr[lt++] = str[i];
}
}
nstr[lt] = '\0';
maxs = "";
stringstream st(nstr);
while(st >> cur) {
int lk = 0, t = 0, zt = 0;
for(int i = 0; i < cur.length(); ++ i) {
if(cur[i] != '0') t = 1;
if(cur[i] == '0') zt = 1;
if(t)nstr[lk++] = cur[i];
}
if(lk == 0 && zt == 1) nstr[lk ++] = '0';
nstr[lk] = '\0';
cur = string(nstr);
if(cur.length() > maxs.length()) maxs = cur;
else if(cur == maxs) maxs = max(cur, maxs);
}
if(maxs.length() == 0) {
printf("-1\n");
} else {
printf("%s\n", maxs.c_str());
}
}
return 0;
}
//暴力模拟不解释
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <bitset>
#include <map>
#include <sstream>
#include <unordered_set>
using namespace std;
const int MAXN = 1e4 + 5;
const int INF = 0x3f3f3f3f;
const int XX = 1e3 + 5;
char str[MAXN];
int k;
int main() {
while(~scanf("%s%d", str, &k)) {
int l = 0, sum = 0, len = strlen(str);
for(int i = 0;i < len;i ++){
sum ++;
if(sum == 2 * k){
for(int j = l;j < l + k / 2;j ++){
swap(str[j], str[l + k + l - j - 1]);
}
l = i + 1;
sum = 0;
}
}
if(len - l >= k && len - l < 2 * k){
for(int j = l;j < l + k / 2;j ++){
swap(str[j], str[l + k + l - j - 1]);
}
}
if(len - l < k){
for(int j = l;j < len / 2;j ++){
swap(str[j], str[len + l - j - 1]);
}
}
printf("%s\n", str);
}
return 0;
}
//简单的多重背包,如果不懂请看大佬们的背包九讲,
//我的做法只是将物品分为二进制的形式,然后用01背包做
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <bitset>
#include <map>
#include <sstream>
#include <unordered_set>
using namespace std;
const int MAXN = 1e5 + 5;
const int MAXM = 2e6 + 5;
const int INF = 0x3f3f3f3f;
const int XX = 1e3 + 5;
int n, p;
int dp[MAXM], value[MAXN];
struct YHJ {
int a, b;
} Y[MAXN];
int main() {
while(~scanf("%d%d", &n, &p)) {
for(int i = 0; i < n; i ++) {
scanf("%d%d", &Y[i].a, &Y[i].b);
}
int counts = 0;
for(int i = 0; i < n; i++) {
for(int j = 1; j <= Y[i].b; j <<= 1) {
value[counts++] = j * Y[i].a;
Y[i].b -= j;
}
if( Y[i].b > 0) {
value[counts++] = Y[i].b * Y[i].a;
}
}
memset(dp, 0, sizeof(dp));
for(int i = 0; i < counts; i++) {
for(int j = p; j >= value[i]; j--) {
dp[j] = max(dp[j], dp[j - value[i]] + value[i]);
}
}
printf("%d\n", p - dp[p]);
}
return 0;
}
#C++工程师#