The 2018 ACM-ICPC Chinese Collegiate Programming Contest(Ningxia)
A - Maximum Element In A Stack
题意:给出栈的一种进栈和出栈的规则,问栈中的最大值
题解:每次进栈的时候将进栈的值与栈中的最大值比较,将较大的值压入栈
#include
using namespace std;
const int maxn = 5e6 + 56;
typedef long long ll;
int n, p, q, m;
unsigned int SA, SB, SC;
stack s;
ll ans = 0;
unsigned int rng61(){
SA ^= SA << 16;
SA ^= SA >> 5;
SA ^= SA << 1;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
void gen(){
scanf("%d%d%d%d%u%u%u", &n, &p, &q, &m, &SA, &SB, &SC);
for(int i = 1; i <= n; i++){
if(rng61() % (p + q) < p){
//PUSH(rng61() % m + 1);
ll x = rng61() % m + 1;
//cout << x << endl;
if (!s.empty()) x = max(x, s.top());
s.push(x);
}
else{
if (!s.empty()) s.pop();
else continue;
}
if (!s.empty())ans ^= i * s.top();
}
}
int main()
{
int T;
cin >> T;
for (int t = 1; t <= T; t++){
ans = 0;
while (!s.empty()) s.pop();
printf("Case #%d: ", t);
gen();
cout << ans << '\n';
}
return 0;
}
B - Rolling The Polygon
题意:给一个凸多边形,问多边形旋转一周的过程中,凸多边形中的一点Q经过的路径的长度
题解:计算几何
#include
#define sqr(x) ((x)*(x))
using namespace std;
const int maxn = 100;
struct Point{
double x, y;
}p[maxn], Q;
struct Vec{
double x, y;
Vec(){}
Vec (double a, double b){
x = a, y = b;
}
double operator*(Vec a){
return a.x*x+a.y*y;
}
}v[maxn];
const Vec X = {1, 0};
double dis(Point a, Point b){
return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
}
double len(Vec a){
return sqrt(sqr(a.x) + sqr(a.y));
}
double ang(Vec a, Vec b){
return acos((a * b) / len(a) / len(b));
}
Vec Mns(Point a, Point b){
return Vec(a.x - b.x, a.y - b.y);
}
int n;
int main()
{
int T;
cin >> T;
for (int t = 1; t <= T; t++){
printf("Case #%d: ", t);
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%lf%lf", &p[i].x, &p[i].y);
}
p[n] = p[0]; p[n+1] = p[1];
int sz= 0;
for (int i = 1; i <= n; i++){
v[i] = Mns(p[i+1], p[i]);
}
v[0] = v[n];
scanf("%lf%lf", &Q.x, &Q.y);
double ans = 0;
for (int i = 1; i <= n; i++){
double sita = ang(v[i], v[i-1]);
double l = dis(Q, p[i]);
ans += l * sita;
}
// cout << ans << endl;
printf("%.3f\n", ans);
}
return 0;
}
C - Caesar Cipher
题意:给出原码与密码的变换规则,要用给定的规则将给定的密码还原,当然加密规则特别简单
题解:水题
#include
using namespace std;
const int maxn = 100;
char p[maxn],c[maxn],s[maxn];
int n, m;
int main()
{
int T;
cin>>T;
for(int t = 1; t <= T; t++)
{
printf("Case #%d: ", t);
cin >> n >> m;
cin >> p >> c >> s;
int key=(int)p[0]-(int)c[0];
for(int i=0; i='a'&&c[i]<='z'){
if(s[i]+key>'z')
s[i]=(s[i]-26+key);
else if(s[i]+key<'a')
s[i]=s[i]+key+26;
else
s[i]=s[i]+key;
}
else
{
if(s[i]+key>'Z')
s[i]=(s[i]-26+key);
else if(s[i]+key<'A')
s[i]=s[i]+key+26;
else
s[i]=s[i]+key;
}
}
printf("%s\n",s);
}
return 0;
}
D - Take Your Seat
题意:两个问题,
第一个问题:飞机上n个人,第i个人要坐在第i个位置,但是第一个人忘了自己的位置,所以他就会随机找一个位置坐下来,被坐的这个人发现自己的位置被坐了就会随机找一个没有被坐的位置坐下,这n个人是按顺序上飞机的,问第n个人坐在第n个位置的概率是多少
第二个问题:如果这n个人不是按顺序上飞机的,第n个人坐在第n个位置的概率是多少
题解:第一问,可以推出
化简一下得 (1)
将n-1带入 (2)
将左边一个 移向变成 (3)
(3)-(1) 得
得
容易想到
第二问:可以推出
发现相比第一问就加了
#include
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 1e2 + 10;
int main()
{
int T;
double ans1 = 0,ans2 = 0;
scanf("%d", &T);
for (int t = 1; t <= T; t++){
printf("Case #%d: ", t);
double n, m;
scanf("%lf%lf", &n, &m);
if (n == 1) ans1 = 1.0;
else ans1 = 0.5;
double ans2 = (1.0 + m) / (2.0 * m);
//cout << ans1 << " " << ans2 << endl;
printf("%.6f %.6f\n", ans1, ans2);
}
return 0;
}
E - 2-3-4 Tree
题意:给出2-3-4树的构造方法,然后输出2-3-4树的前序遍历
题解:抄了人家的模板
#include
#define FOR(i,s,t) for(int i=(s);i<=(t);i++)
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long LL;
const int maxn=1e5+5;
int a[maxn];
int cnt,rt;
struct Node
{
int f;
vectord,ch;
void init(int fa,int x)//f是该节点的父亲? x是当前的结点拥有的值?
{
f=fa;
d.clear(),ch.clear();
d.push_back(x);//当前节点拥有多少的所有的值
}
}tr[maxn];
void ins(int p,int x)//(1,x)
{
// cout<<"rt:"<cpy_d,cpy_ch;
cpy_d.swap(tr[p].d),cpy_ch.swap(tr[p].ch);//swap ?? 这时候cop_d 和cpy_ch拥有了ty[p].d和ty[p].ch的内容 而这两个变为空?
if(p==rt)//如果p和rt相等??代表已经是根节点了 上面没有结点
{
//相当于中间结点往上提 0 1 2三个结点 中间的自然是1 变为其它两个节点的父亲
tr[rt=++cnt].init(0,cpy_d[1]);//新的结点 父亲变为0 插入d[1]?
tr[++cnt].init(rt,cpy_d[0]);//新的结点 父亲变为rt 插入d[0]? 相当于成为左儿子
tr[p].init(rt,cpy_d[2]);//原来的结点父亲是rt 只剩下d[2]? 相当于成为右儿子
tr[rt].ch.push_back(cnt),tr[rt].ch.push_back(p);//把这两个结点加入到他们的父亲节点的孩子中
if(cpy_ch.size())//如果当前节点有孩子 自然孩子也需要进行操作
{
//左边两个分到左边 右边两个分到右边 大概是为了平衡吧。。。
tr[cnt].ch.push_back(cpy_ch[0]),tr[cpy_ch[0]].f=cnt;//原来的左儿子自然也就成为现在左儿子的左儿子了
tr[cnt].ch.push_back(cpy_ch[1]),tr[cpy_ch[1]].f=cnt;//为什么把1也归为左儿子的儿子?
tr[p].ch.push_back(cpy_ch[2]),tr[cpy_ch[2]].f=p;//为什么把2 3归为右儿子的儿子?
tr[p].ch.push_back(cpy_ch[3]),tr[cpy_ch[3]].f=p;
// cout<1;i--)//??为什么要交换? 懂了 因为你要保证孩子也是有序的呀 所以要把新插入的结点换到p之后
{
if(tr[f].ch[i-1]!=p) swap(tr[f].ch[i-1],tr[f].ch[i]);
else break;
}
if(cpy_ch.size())
{
tr[p].ch.push_back(cpy_ch[0]),tr[cpy_ch[0]].f=p;
tr[p].ch.push_back(cpy_ch[1]),tr[cpy_ch[1]].f=p;
tr[cnt].ch.push_back((cpy_ch[2])),tr[cpy_ch[2]].f=cnt;
tr[cnt].ch.push_back(cpy_ch[3]),tr[cpy_ch[3]].f=cnt;
}
p=f;
}
}
// cout<<"*"<tr[p].d[tr[p].d.size()-1]) ins(tr[p].ch[tr[p].ch.size()-1],x);//如果大于最后一个元素 显然是插到右孩子中的 递归右儿子
else//不比第一个小 不比最后一个大 则肯定插入到中间
{
for(int i=1;i >T;
int ca=1;
while(T--)
{
int N;
cin>>N;
for(int i=1;i<=N;i++) cin>>a[i];
cnt=rt=1,tr[rt].init(0,a[1]); //第一个点的父亲为0 拥有元素a[1]
for(int i=2;i<=N;i++) ins(rt,a[i]);//rt不是一直是1吗?
printf("Case #%d:\n", ca++);
dfs(rt);
}
return 0;
}
F - Moving On
题意:给出一个图,每条边有长度,每个城市有危险值,要求一条最短路,使得经过的城市的危险值都小于w
题解:离散化,弗洛伊德,按危险值排序,按危险值由小到大加入城市,计算最短路
#include
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=200 + 2;
int r[maxn];
int dis[maxn][maxn][maxn];
int id[maxn];
bool cmp(int i,int j){
return r[i]
G - Factories
题意:给出一颗有权树,每个叶子节点可以建设工厂,问建k个工厂,如何安排使得所有工厂的之间的距离之和最短
题解:树型dp
表示以i为根节点的子树,建设j个工厂的最小距离
#include
#define FOR(i,s,t) for(int i=(s);i<=(t);i++)
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 2;
const int maxk = 100 + 2;
const ll inf = 1e12;
const ll INF = 0x3f3f3f3f3f3f3f3f;
vector > edge[maxn];
ll dp[maxn][maxk];
int sz[maxn];
int n, k, rt;
ll miner(ll a, ll b){
return a < b ? a : b;
}
void dfs(int u, int fa){
if (edge[u].size() == 1){
sz[u] = 1;
dp[u][1] = 0ll;
}
dp[u][0] = 0ll;
FOR(i, 0, edge[u].size() - 1){
int v = edge[u][i].first;
ll w = edge[u][i].second;
if (v == fa) continue;
dfs(v, u);
sz[u] += sz[v];
dp[u][k] = miner(dp[u][k], dp[v][k]);
for (int j = min(k, sz[u]); j >= 1; j--){
FOR(l, 1, min(j, sz[v])){
dp[u][j] = miner(dp[u][j], dp[u][j - l] + dp[v][l] +1ll * (ll)w *(ll)l * (ll)(1ll * k - 1ll * l));
}
}
}
}
int main() {
//freopen("G.in", "r", stdin);
//freopen("G.out", "w", stdout);
int T;cin >> T;
FOR(cas, 1, T){
printf("Case #%d: ", cas);
scanf("%d%d",&n, &k);
FOR(i, 1, n) FOR(j, 0, k) dp[i][j] =inf;
FOR(i, 1, n) edge[i].clear();
FOR(i, 1, n) dp[i][0] = 0ll;
FOR(i, 1, n) sz[i] = 0;
FOR(i, 1, n - 1){
int u, v;
ll w;
scanf("%d%d%lld", &u, &v, &w);
//printf("%d\n",w);
edge[u].pb(mp(v, w));
edge[v].pb(mp(u, w));
}
rt = 1;
FOR(i, 1, n){
if (edge[i].size() > 1){
rt = i;
break;
}
}
dfs(rt, -1);
printf("%lld\n", dp[rt][k]);
}
return 0;
}
H - Fight Against Monsters
题意:打怪兽,每个怪兽有生命值和攻击力,每个怪兽在没死之前单位时间都会攻击玩家,玩家每打一个怪兽伤害都是从1开始递增,问玩家最少需要承受多少伤害
题解:贪心(排序)
按 排序,Turn是需要打几回合怪兽才会死的回合数
#include
using namespace std;
const int maxn = 1e5 + 5;
typedef long long ll;
struct Monster{
int hp, atk;
}mons[maxn];
int n;
bool cmp(Monster A, Monster B){
ll x1 = ceil((sqrt(1.0 + 8.0 * A.hp) - 1) / 2.0);
ll x2 = ceil((sqrt(1.0 + 8.0 * B.hp) - 1) / 2.0);
if (1ll * A.atk * x2 == 1ll * x1 * B.atk) return A.atk > B.atk;
return 1ll * A.atk * x2 > 1ll * x1 * B.atk;
}
ll sum[maxn];
int main()
{
int T;
cin >> T;
for (int t = 1; t <= T; t++){
printf("Case #%d: ", t);
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%d%d",&mons[i].hp, &mons[i].atk);
}
sort(mons, mons+n, cmp);
ll turn = 0ll, ans = 0ll;
for (int i = 0; i <= n + 1; i++) sum[i] = 0ll;
for (int i = n - 1 ; i >= 0; i--){
sum[i] += sum[i + 1] + (ll)mons[i].atk;
}
int i = 0;
for (i = 0; i < n; i++){
turn = (ll)ceil((sqrt(1.0 + 8.0 * mons[i].hp) - 1) / 2.0);
ans += 1ll* sum[i] * (ll)turn;
// cout << turn << endl;
}
cout << ans <<'\n';
}
return 0;
}
J - Nested Triangles
题意:新定义之中东西,Nested Triangles,就是若干个公用一条边的三角形,除了公用的这条边另外的两条边都不相交或者重合,问最大的Nested Triangles最多有几个三角形
题解:几何+最长上升子序列
按照其中一边的边排序,另一边的边最最长上升子序列
#include
#define pb push_back
#define mp make_pair
#define FOR(i,s,t) for(int i=(s);i<=(t);i++)
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 1e5 + 5;
struct Vec{
ll x, y;
Vec(){}
Vec(ll a, ll b){x = a,y = b;}
}PQ, QP;
struct Node{
ll x, y;
Vec operator -(const Node A)const{return Vec(x - A.x, y - A.y);}
}node[maxn],P, Q;
vector id[2];
int pre[maxn], f[maxn], c[maxn];
int n;
ll Cross(Vec A, Vec B){return A.x * B.y - A.y * B.x;}
ll Mult(Vec A, Vec B){return A.x * B.x + A.y * B.y;}
bool isUp(Node x){return Cross(PQ, x - P) > 0;}
int lowbit(int x) {return x&(-x);}
void modify(int x, int val){
for (int i = x; i < maxn; i+= lowbit(i)){
if (x != -1 && (c[i] == -1 || f[val] >= f[c[i]])){
if (c[i] == -1 || f[val] > f[c[i]]) c[i] = val;
//else if (f[x] == f[c[i]] && x < c[i]) c[i] = x;
else if (val < c[i]) c[i] = val;
}
}
return ;
}
int query(int x){
int ret = -1;
for (int i = x; i>0; i-=lowbit(i)){
if (c[i] != -1 && (ret == -1 || f[c[i]] >= f[ret])){
if (ret == - 1|| f[c[i]] > f[ret]) ret = c[i];
//else if (f[c[i]] == f[ret] && c[i] < ret) ret = c[i];
else if (c[i] < ret) ret = c[i] ;
}
}
return ret;
}
bool cmp1(int i, int j){return Cross(node[i] - P, node[j] - P) > 0;}
bool cmp2(int i, int j){return Cross(node[i] - Q, node[j] - Q) < 0;}
int a[maxn], b[maxn];
void print(int x){
int i = x;
while (i != -1){
printf("%d\n", i);
i = pre[i];
}
}
int main(){
int T;cin >> T;
FOR(cas, 1, T){
scanf("%lld%lld%lld%lld", &P.x, &P.y, &Q.x, &Q.y);
PQ = Q - P;
QP = P - Q;
id[0].clear();
id[1].clear();
scanf("%d", &n);
FOR(i , 1, n){
scanf("%lld%lld",&node[i].x, &node[i].y);
if (isUp(node[i])) id[0].pb(i);
else id[1].pb(i);
}
int M[2] = {0};
FOR(i, 0, 1){
sort(id[i].begin(), id[i].end(), cmp1);
for (int j = 0; j < id[i].size(); j++){
if (j == 0) a[id[i][j]] = 1;
else if (cmp1(id[i][j - 1], id[i][j])) a[id[i][j]] = a[id[i][j-1]] + 1;
else a[id[i][j]] = a[id[i][j-1]];
}
sort(id[i].begin(), id[i].end(), cmp2);
for (int j = 0; j < id[i].size(); j++){
if (j == 0) b[id[i][j]] = 1;
else if (cmp2(id[i][j - 1], id[i][j])) b[id[i][j]] = b[id[i][j-1]]+1;
else b[id[i][j]] = b[id[i][j-1]];
}
for (int j = 0; j <= id[i].size() ; j++) c[j] = -1;
for (int j = 0; j < id[i].size() ; j++){
int k = j;
while (k + 1 < id[i].size()&& b[id[i][k]] == b[id[i][k + 1]]) k++;
FOR(p, j , k){
int o = id[i][p];
pre[o] = query(a[o] - 1);
f[o] = pre[o] == -1 ? 1 : f[pre[o]] + 1;
M[i] = max(M[i], f[o]);
}
FOR(p, j ,k){
int o = id[i][p];
modify(a[o], o);
}
j = k;
}
swap(P, Q);
swap(PQ, QP);
}
//FOR(j, 1, n) cout << c[j] << " " ;cout << endl;
printf("Case #%d: %d\n", cas, max(M[1], M[0]));
FOR(j, 1, n){
if (f[j] == max(M[1], M[0])){
print(j);
break;
}
}
}
return 0;
}
L - Continuous Intervals
题意:给出一串数,定义一段区间是连续的表示这段区间排序以后相邻两个数的差不超过1
题解:用MAX表示这段区间的最大值,MIN表示这段区间的最小值,CNT表示这段区间的不同数的种类数;MAX-MIN=CNT-1时,满足条件,MAX-MIN>=CNT-1恒成立。简单化简一下就是一段区间的MAX-MIN-CNT+1=0,则这个区间符合条件。
枚举区间的R,计算有多少个L满足L,R这个区间满足条件,用线段树保存MAX-MIN-CNT-1的最小值及其数量,当枚举一个新的R时,最大值受到影响的区间就是右边第一个比a[L]大的数是a[R]的L,可以用单调栈维护,同理最小值也可以用单调栈维护。CNT受影响的区间就是a[R]上一次出现的位置到R这段区间的L,这段区间的每一个L,构成的区间[L,R]都多了一个新的数,所以CNT多了1,所以MAX-MIN-CNT+1,就少1。可以用map维护上一个a[R]出现的位置,也可以离散化。
#include
#define FOR(I,S,T) for(int I=(S);I<=(T);I++)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 1e5 +10;
int M[maxn << 2], cnt[maxn << 2], tag[maxn << 2];
void gather(int p) {
M[p] = min(M[p << 1], M[p << 1 | 1]);
if (M[p << 1] == M[p << 1 | 1]) cnt[p] = cnt[p << 1] + cnt[p << 1 | 1];
else if (M[p << 1] < M[p << 1 | 1]) cnt[p] = cnt[p << 1];
else cnt[p] = cnt[p << 1 | 1];
}
void push(int p){
if (tag[p]){
tag[p << 1] += tag[p];
tag[p << 1 | 1] += tag[p];
M[p << 1] += tag[p];
M[p << 1 | 1] += tag[p];
tag[p] = 0;
}
}
void build(int p, int l, int r){
tag[p] = 0, cnt[p] = 1;
if (l < r){
int mid = (l + r) / 2;
build(p << 1, l, mid);
build(p << 1 | 1, mid + 1, r);
gather(p);
}
else M[p] = 0;
}
void modify(int p, int tl, int tr, int l, int r, int v){
if (tl > tr) return ;
if (tl > r || tr < l) return ;
if (l <= tl && tr <= r){
tag[p] += v;
M[p] += v;
return;
}
push(p);
int mid = (tl + tr) >> 1;
modify(p << 1, tl, mid, l, r, v);
modify(p << 1 | 1, mid + 1, tr, l, r, v);
gather(p);
}
int query(int p, int tl, int tr, int l, int r){
if (tl > tr) return 0;
if (tr < l || tl > r) return 0;
if (l <= tl && tr <= r) return M[p] == 0 ? cnt[p] : 0;
push(p);
int mid = (tl + tr) >> 1;
return query(p << 1, tl, mid, l, r) + query(p << 1 | 1, mid + 1, tr, l, r);
}
int a[maxn];
map pre;
stack up, down;
int main() {
int T;
cin >> T;
FOR(cas, 1, T){
int n;
ll ans = 0;
scanf("%d", &n);
build(1, 1, n);
while (!up.empty()) up.pop();
while (!down.empty()) down.pop();
pre.clear();
FOR(i,1,n) {
scanf("%d", a + i);
while (!up.empty() && a[up.top()] > a[i]) {
int o = up.top();
up.pop();
if (!up.empty()) modify(1, 1, n, up.top() + 1, o, a[o] - a[i]);
else modify(1, 1, n, 1, o, a[o] - a[i]);
}
up.push(i);
while (!down.empty() && a[down.top()] < a[i]) {
int o = down.top();
down.pop();
if (!down.empty()) modify(1, 1, n, down.top() + 1, o, a[i] - a[o]);
else modify(1, 1, n, 1, o, a[i] - a[o]);
}
down.push(i);
if (pre.find(a[i]) != pre.end()) modify(1, 1, n, pre[a[i]] + 1, i - 1, -1);
else modify(1, 1, n, 1, i - 1, -1);
pre[a[i]] = i;
ans += query(1, 1, n, 1, i);
}
printf("Case #%d: %lld\n", cas, ans);
}
return 0;
}
你可能感兴趣的:(acm)
Mac mini 与 iMac
点点凌阁
与更流行的MacBook产品线不同,Macmini和iMac是为桌面使用而设计的。这两种型号都针对台式机市场。我们将比较Macmini和iMac之间的差异,以便做出选择。1.Macmini与iMac:内部硬件和性能Macmini和iMac与外部非常不同,但是共享几乎相同的内部硬件。Macmini和iMac的当前型号装有AppleSiliconM1芯片,一个8核处理器。它们在所有标准配置中都包含相同
【开发日记】解放双手自动续期SSL证书
文章目录1.自动创建定时任务2.验证定时执行的命令3.修改定时执行的时间接上一个文章,如果看不懂本文,请先阅读前文:【开发日记】利用acme.sh获取免费泛域名SSL证书1.自动创建定时任务通过acme.sh--install-cert命令执行了自动化部署后,acme.sh会通过之前安装的cron自动创建一个定时任务。使用如下命令查看是否成功创建了定时任务:crontab-l正常结果显示应该是如下
2016级计算机C++助教工作(6)OJ上各种返回结果以及代表意思和可能涉及的原因
GDRetop
##C++助教 C++助教
1.judge上返回结果与可能的问题、解决方法内容来源:http://acm.tju.edu.cn/toj/faq.htmlQ:Whatisthemeaningofthejudge'sreplyXXXXX?A:Hereisalistofthejudge'srepliesandtheirmeaning:Received:Thejudgesystemhasreceivedyoursolution,us
中国计算机学会(CCF)推荐学术会议-C(网络与信息安全):ACM ASIACCS 2026
爱思德学术
网络安全 信息与通信 密码学
ACMASIACCS2026BuildingonthesuccessofACMConferenceonComputerandCommunicationsSecurity(CCS),theACMSpecialInterestGrouponSecurity,Audit,andControl(SIGSAC)formallyestablishedtheannualACMAsiaConferenceonCo
中国计算机学会(CCF)推荐学术会议-A(数据库/数据挖掘/内容检索):ACM KDD 2026
爱思德学术
大数据 人工智能 数据挖掘
ACMKDD2026KDDisthepremierDataScienceandAIconference,hostingbothaResearchandanAppliedDataScienceTrack.TheconferencewilltakeplacefromAugust9to13,2026,inJeju,Korea.KDDhastwosubmissioncyclesperyear.Thisca
HDU 4628 Pieces (状压DP+记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628#includeusingnamespacestd;#definedebugputs("YES");#definerep(x,y,z)for(int(x)=(y);(x)>=1,x=x*x%mod)if(y&1)t=t*x%mod;returnt;}llgcd(llx,lly){returny?g
Groovy初探
先写一个java代码//./java/MyClass.javapublicclassMyClass{publicintadd(){inta=1;intb=2;returna+b;}publicstaticvoidmain(String[]args){MyClassm=newMyClass();System.out.println(m.add());}}编译java源文件javacMyClass.j
河南萌新联赛2024第(一)场:河南农业大学(ADFGHIK)
wh233z
比赛题解 牛客 算法 数据结构 c++
文章目录写在前面回归正题A-造数思路编程H-两难抉择思路编程K-图上计数(Easy)思路编程I-除法移位思路编程F-两难抉择新编思路编程G-旅途的终点思路编程D-小蓝的二进制询问思路编程题目链接:https://ac.nowcoder.com/acm/contest/86639写在前面这是我打的第一次萌新联赛,总体来说题目不算太难,但以我现在的水平只能写出中等偏下的题目,还是得先打好基础,在往上拔
string + 栈 & bitset & 可达性统计(拓扑排序)
很多做题的时候宁愿想到用暴力模拟半天愣是想不到可以用栈来解决!所以今天就加深对栈的印象,顺便熟悉一下string的一些相关操作(便于明年天梯赛的暴力模拟)。string+栈:最优屏障详解见代码://Problem:最优屏障//Contest:NowCoder//URL:https://ac.nowcoder.com/acm/problem/14666//MemoryLimit:4MB//TimeL
git bash命令不够完善,想整合msys2该怎么办?
GitBash本质上是基于MSYS2的精简版,它使用的是一个较轻量的MSYS2环境,因此它们在某种程度上是“同源”的。但是:GitBash是精简的,只提供最基础的Unix工具MSYS2是完整的,可以通过pacman安装很多包想要整合的目的是什么?如果你是想在GitBash里使用更多Linux命令(比如wget、curl、man、zip等),那GitBash本身不支持pacman包管理器,你有两个选
linux install RDMA IB netcard
richer_live
c++ linux 服务器 运维
安装RDMAIB网卡驱动指令sudoapt-getinstallbuild-essentiallibelf-devcmakesudoapt-getinstalllibibverbs1libibverbs-devlibrdmacm1librdmacm-devrdmacm-utilsibverbs-utilssudomodprobeib_coresudomodproberdma_ucm无IB网卡的机器
阿里云ssl证书自动安装及续订(acme)
cherishSpring
nginx linux # docker容器 阿里云 ssl 数据库
nuc10黑苹果无法wifi上网
家里小书房重新整理了下,也想放一台mac台式机用来工作学习,可惜公司已经有一台macmini,手头又有macpro,实在不好意思再购一台mac台式机。就打算重新把nuc10安装黑苹果。具体的nuc10黑苹果安装参考https://zhuanlan.zhihu.com/p/146191643安装好了后,一切都正常,就是没有wifi。这里记录下解决方案:下载wifi驱动https://github.c
运维技术干货 — 不仅是 Linux 运维最佳实践
python算法小白
Linux
附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全:书单导航页(点击右侧极客侠栈即可打开个人博客):极客侠栈①【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版)②【算法数据结构+acm】从入门到进阶吐血整理书单50+本(珍藏版)③【数据库】从入门到进阶必读18本技术书籍网盘吐血整理网盘(珍藏版)④【Web前端】从HTML到JS到AJ
mac mlx大模型框架的安装和使用
liliangcsdn
python java 前端 人工智能 macos
mlx是apple平台的大模型推理框架,对macm1系列处理器支持较好。这里记录mlx安装和运行示例。1安装mlx框架condacreate-nmlxpython=3.12condaactivatemlxpipinstallmlx-lm2运行mlx测试例以下是测试程序,使用方法和hf、vllm等推理框架基本一致。importosos.environ['HF_ENDPOINT']="https://
在mac m1基于llama.cpp运行deepseek
lama.cpp是一个高效的机器学习推理库,目标是在各种硬件上实现LLM推断,保持最小设置和最先进性能。llama.cpp支持1.5位、2位、3位、4位、5位、6位和8位整数量化,通过ARMNEON、Accelerate和Metal支持Apple芯片,使得在MACM1处理器上运行Deepseek大模型成为可能。1下载llama.cppgitclonehttps://github.com/ggerg
牛客周赛 Round 56
洋洋的计算机刷题日记
牛客竞赛网比赛刷题 算法
牛客周赛Round56A面包店故事链接:https://ac.nowcoder.com/acm/contest/88392/A来源:牛客网题目描述小镇上有一家面包店,面包以元的价格出售,加元可以多加几块培根。小歪带着元来到了面包店,他想知道自己能不能买到加培根的面包?输入描述:在一行上输入三个整数,,(1≤,,≤100)代表面包的价格、培根的价格和小歪带的钱。输出描述:如果小歪能加到培根,在一行上
洛谷 P2107 小Z的AK计划
zhanghengjie20120214
算法 c++ 贪心算法
题目描述在小Z的家乡,有机房一条街,街上有很多机房。每个机房里都有一万个人在切题。小Z刚刷完CodeChef,准备出来逛逛。机房一条街有n个机房,第i个机房的坐标为xi,小Z的家坐标为0。小Z在街上移动的速度为1,即从x1到x2所耗费的时间为∣x1−x2∣。每个机房的学生数量不同,ACM题目水平也良莠不齐。小Z到达第i个机房后,可以花ti的时间想题,然后瞬间AK;当然,也可以过机房而不入。小Z现在
SIGMOD论文解读|在自下而上优化中添加布隆过滤器
Gauss松鼠会
技术交流 数据库 gaussdb database
6月22日至27日,2025ACMSIGMOD/PODS国际学术会议在德国柏林举行。25日,华为多伦多分布式调度和数据引擎实验室主任工程师TimothyZeyl受邀出席,就入选的《IncludingBloomFiltersinBottom-upOptimization》论文进行了解读该论文创新性地首次提出了在自下而上的优化器的基于成本的优化过程中添加布隆过滤器(BloomFilter)的技术。该技
深入DP!!!!!!!!!!!!!!-----------------------“DP就像人生:你的当前状态由过去的选择决定,而你的选择将影响未来状态。定义好你的状态转移方程,找到最优的人生路径!“
zwenqiyu
算法
"动态规划不是魔法,而是将大问题拆解成小问题的艺术"——一位ACMer的深夜顿悟暑假集训我们过关斩将,来到了线性动态规划和前缀优化这里,不好,是让人心惊胆战的DP!!!不同于其他题解,我们在详说DP之前,我们先说说记忆化搜索。什么是记忆化搜索?记忆化搜索(Memoization)是一种优化递归算法的技术,通过存储已计算的子问题结果,避免重复计算。它是自顶向下的动态规划实现方式。模板题斐波那契数列问
怀化学院2024年ACM基地第二轮招新机试题解
啊这.-
算法
比赛地址:https://www.nowcoder.com/acm/contest/96304。【邀请码:acm20241115】A宋学长买书#include#defineintlonglongconstintN=1e6+10;inta[N];intmin(inta,intb){if(a=m)pl=min(pl,x);elseans+=x,cnt++;}ans+=pl-1;if(cnt>m)pri
使用zerotier one实现内网穿透及MOON架设过程整理
首先要安装zerotier-one这个软件包,如果是ArchLinux,直接运行(可直接复制不带$符号):$sudopacman-Szerotier-one如果是Ubuntu/Debian/CentOS,则运行:$curl-shttps://install.zerotier.com/|sudobash注:如果是Windows或者macOS、Android、iOS等,那么可以在https://www
#19ACM第三次周赛补题赛de题解呐#
桦hua呐
秃头hua的题解
我真的太low了,谁能教教我C.D.E.?A.我是个签到题!这题的确签到,一共y/n两种情况,运气不好WA一次,运气好直接过,但相信聪明的你们,一定去探索了方程式的规律,才不会像我一样盲猜n就对了,嘿嘿,看题↓描述:判断x^4+y^4=z^4,x,y,z是否存在正整数解输入:无输出:存在输出“YES”,不存在输出"NO"直接送上hua的无脑代码↓#includeintmain(){printf("
#19ACM第五次周赛补题赛de题解呐#
桦hua呐
秃头hua的题解
磕出来的所有题唉……A.防AK题目——超难系列这是一道Helloword题,题面花里胡哨,但就想让你输出一个“Accepted!!!”。#includeintmain(){printf("Accepted!!!");return0;}B.Fenoix超厌恶xxx这一题呢判断几种可能情况来进行即可,先看题面:描述:Fenoix觉得xxx是一个非常怪的人,因为他特别厌恶xxx这样的人。现在他给你出一道
Android Telephony 网络状态中的 NAS 信息
Dic-
# Android Telephony # 计算机网络 网络通信 Telephony 自学笔记 Android 计算机网络 移动网络 非接入层
引言上层如何拿到NAS信息?那么首先要知道什么是NAS。领域知识术语表通信网络术语英文缩写英文全称中文含义NASNon-AccessStratum非接入层RRCRadioResourceControl无线资源控制层PDCPPacketDataConvergenceProtocol分组数据汇聚协议层RLCRadioLinkControl无线链路控制层MACMediumAccessControl媒体接
HDU杭电OJ基础100题2010-2019(C语言版)
雁于飞
算法专栏 c语言 开发语言
文章目录@[TOC](文章目录)[原题出处](https://acm.hdu.edu.cn/listproblem.php?vol=11)前言p2010.水仙花数问题描述解题思路代码核心思想:p2011多项式求和问题描述代码p2003求绝对值问题描述解题思路代码扩展p2004成绩转换问题描述解题思路代码重点p2005第几天问题描述解题思路代码扩展p2006求奇数的乘积p2007平方和与立方和问题描
WIN11+VSCODE搭建的c/c++环境调试报错解决
xtmatao
C语言编程 vscode c语言 c++
解决调试报错前面win11+vscode搭建的c/c++环境,ctrl+shift+B生成正常,cttl+F5运行正常。今天打断点逐步调试时报错,提示找不到库文件。解决方案如下:下载mingw-w64源码库:(两种途径)通过MSYS2UCRT64终端下载pacman-Sgit#安装gitgitclonehttps://git.code.sf.net/p/mingw-w64/mingw-w64#下载
手动续期证书后自动上传到阿里云
要将acme.sh续期后的脚本自动传到阿里云上,可以按照以下步骤进行:安装阿里云CLI:在服务器上安装阿里云命令行工具(CLI),以便能够通过命令行与阿里云进行交互。可以使用以下命令进行安装:wgethttps://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz&&tarxzvfaliyun-cli-linux-latest-amd64
Mac mini 跑 DeepSeek R1 及 QwQ-32B模型实测报告
强哥之神
GPT macos GPU deepseek 人工智能 语言模型 LLM
测试对象:2025款Macmini(M4/M4Pro芯片)测试模型:DeepSeek-R1(14B/32B)、QwQ-32B(原版/量化版)测试目标:硬件性能适配性、推理速度、内存占用及优化方案一、Macmini硬件配置概览配置项M4基础款(16GB)M4Pro高配(32GB/64GB)芯片M4(10核CPU/10核GPU)M4Pro(14核CPU/20核GPU)内存16GB统一内存32GB/64
项目实战复盘:跨平台团队如何组合工具完成 iOS App 上架全流程
2501_91600889
http udp https websocket 网络安全 网络协议 tcp/ip
在一次使用Flutter开发的跨平台项目中,我们团队要将一款教育类App同时上线Android与iOS。团队成员清一色Windows/Linux用户,仅有远程使用的一台旧款Macmini,资源非常有限。这篇文章将还原我们当时iOS上架的完整流程,并分享我们是如何组合使用不同工具,各自完成关键环节,不依赖完整Mac环境也能顺利上线AppStore的经验。阶段一:准备开发者证书和描述文件(Provis
jvm调优总结(从基本概念 到 深度优化)
oloz
java jvm jdk 虚拟机 应用服务器
JVM参数详解:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
【Scala十六】Scala核心十:柯里化函数
bit1129
scala
本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系 1. 什么是柯里化函数
A way to write functions with multiple parameter lists. For instance
def f(x: Int)(y: Int) is a
HashMap
dalan_123
java
HashMap在java中对很多人来说都是熟的;基于hash表的map接口的非同步实现。允许使用null和null键;同时不能保证元素的顺序;也就是从来都不保证其中的元素的顺序恒久不变。
1、数据结构
在java中,最基本的数据结构无外乎:数组 和 引用(指针),所有的数据结构都可以用这两个来构造,HashMap也不例外,归根到底HashMap就是一个链表散列的数据
Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
周凡杨
java 更新 swing JTextArea
在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。
问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现
servlet或struts的Action处理ajax请求
g21121
servlet
其实处理ajax的请求非常简单,直接看代码就行了:
//如果用的是struts
//HttpServletResponse response = ServletActionContext.getResponse();
// 设置输出为文字流
response.setContentType("text/plain");
// 设置字符集
res
FineReport的公式编辑框的语法简介
老A不折腾
finereport 公式 总结
FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式。
简单的说下自己感觉的公式要注意的几个地方:
1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)
linux mysql 数据库乱码的解决办法
墙头上一根草
linux mysql 数据库乱码
linux 上mysql数据库区分大小写的配置
lower_case_table_names=1 1-不区分大小写 0-区分大小写
修改/etc/my.cnf 具体的修改内容如下:
[client]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/va
我的spring学习笔记6-ApplicationContext实例化的参数兼容思想
aijuans
Spring 3
ApplicationContext能读取多个Bean定义文件,方法是:
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml
mysql 基准测试之sysbench
annan211
基准测试 mysql基准测试 MySQL测试 sysbench
1 执行如下命令,安装sysbench-0.5:
tar xzvf sysbench-0.5.tar.gz
cd sysbench-0.5
chmod +x autogen.sh
./autogen.sh
./configure --with-mysql --with-mysql-includes=/usr/local/mysql
sql的复杂查询使用案列与技巧
百合不是茶
oracle sql 函数 数据分页 合并查询
本片博客使用的数据库表是oracle中的scott用户表;
------------------- 自然连接查询
查询 smith 的上司(两种方法)
&
深入学习Thread类
bijian1013
java thread 多线程 java多线程
一. 线程的名字
下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。
同时,Thr
JSON串转换成Map以及如何转换到对应的数据类型
bijian1013
java fastjson net.sf.json
在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。
一.fastjson实例
JsonUtil.java
package com.study;
impor
【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架
bit1129
spring
HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
在
【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中
【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析
bit1129
Mahout
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information re
nginx三种获取用户真实ip的方法
ronin47
随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到<apache获取用户真实IP地址>,如果是后端真实服务器是nginx,那么继续往下看。
实例环境: 用户IP 120.22.11.11
java-判断二叉树是不是平衡
bylijinnan
java
参考了
http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
但是用java来实现有一个问题。
由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass
import ljn.help.*;
public class BalancedBTree {
BeanUtils.copyProperties VS PropertyUtils.copyProperties
诸葛不亮
PropertyUtils BeanUtils
BeanUtils.copyProperties VS PropertyUtils.copyProperties
作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业
[金融与信息安全]最简单的数据结构最安全
comsci
数据结构
现在最流行的数据库的数据存储文件都具有复杂的文件头格式,用操作系统的记事本软件是无法正常浏览的,这样的情况会有什么问题呢?
从信息安全的角度来看,如果我们数据库系统仅仅把这种格式的数据文件做异地备份,如果相同版本的所有数据库管理系统都同时被攻击,那么
vi区段删除
Cwind
linux vi 区段删除
区段删除是编辑和分析一些冗长的配置文件或日志文件时比较常用的操作。简记下vi区段删除要点备忘。
vi概述
引文中并未将末行模式单独列为一种模式。单不单列并不重要,能区分命令模式与末行模式即可。
vi区段删除步骤:
1. 在末行模式下使用:set nu显示行号
非必须,随光标移动vi右下角也会显示行号,能够正确找到并记录删除开始行
清除tomcat缓存的方法总结
dashuaifu
tomcat 缓存
用tomcat容器,大家可能会发现这样的问题,修改jsp文件后,但用IE打开 依然是以前的Jsp的页面。
出现这种现象的原因主要是tomcat缓存的原因。
解决办法如下:
在jsp文件头加上
<meta http-equiv="Expires" content="0"> <meta http-equiv="kiben&qu
不要盲目的在项目中使用LESS CSS
dcj3sjt126com
Web less
如果你还不知道LESS CSS是什么东西,可以看一下这篇文章,是我一朋友写给新人看的《CSS——LESS》
不可否认,LESS CSS是个强大的工具,它弥补了css没有变量、无法运算等一些“先天缺陷”,但它似乎给我一种错觉,就是为了功能而实现功能。
比如它的引用功能
?
.rounded_corners{
[入门]更上一层楼
dcj3sjt126com
PHP yii2
更上一层楼
通篇阅读完整个“入门”部分,你就完成了一个完整 Yii 应用的创建。在此过程中你学到了如何实现一些常用功能,例如通过 HTML 表单从用户那获取数据,从数据库中获取数据并以分页形式显示。你还学到了如何通过 Gii 去自动生成代码。使用 Gii 生成代码把 Web 开发中多数繁杂的过程转化为仅仅填写几个表单就行。
本章将介绍一些有助于更好使用 Yii 的资源:
Apache HttpClient使用详解
eksliang
httpclient http协议
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会
zxing二维码扫描功能
gundumw100
android zxing
经常要用到二维码扫描功能
现给出示例代码
import com.google.zxing.WriterException;
import com.zxing.activity.CaptureActivity;
import com.zxing.encoding.EncodingHandler;
import android.app.Activity;
import an
纯HTML+CSS带说明的黄色导航菜单
ini
html Web html5 css hovertree
HoverTree带说明的CSS菜单:纯HTML+CSS结构链接带说明的黄色导航
在线体验效果:http://hovertree.com/texiao/css/1.htm代码如下,保存到HTML文件可以看到效果:
<!DOCTYPE html >
<html >
<head>
<title>HoverTree
fastjson初始化对性能的影响
kane_xie
fastjson 序列化
之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营。对比了jackson,gson等框架之后,决定用fastjson,为什么呢,因为看名字感觉很快。。。
网上的说法:
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。
基于Mybatis封装的增删改查实现通用自动化sql
mengqingyu
DAO
1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。
2.支持自定义注解包括主键生成、列重复验证、列名、表名等
3.支持批量插入、批量更新、批量删除
<bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.Dynamic
js控制input输入框的方法封装(数字,中文,字母,浮点数等)
qifeifei
javascript js
在项目开发的时候,经常有一些输入框,控制输入的格式,而不是等输入好了再去检查格式,格式错了就报错,体验不好。 /** 数字,中文,字母,浮点数(+/-/.) 类型输入限制,只要在input标签上加上 jInput="number,chinese,alphabet,floating" 备注:floating属性只能单独用*/
funct
java 计时器应用
tangqi609567707
java timer
mport java.util.TimerTask; import java.util.Calendar; public class MyTask extends TimerTask { private static final int
erlang输出调用栈信息
wudixiaotie
erlang
在erlang otp的开发中,如果调用第三方的应用,会有有些错误会不打印栈信息,因为有可能第三方应用会catch然后输出自己的错误信息,所以对排查bug有很大的阻碍,这样就要求我们自己打印调用的栈信息。用这个函数:erlang:process_display (self (), backtrace).需要注意这个函数只会输出到标准错误输出。
也可以用这个函数:erlang:get_s