帮别人做钓鱼网站吗,六台阶客户管理软件,网站为什么会被挂马,家具展示网站源码D.Distinctive Character 看到样例#xff0c;第一个反应贪心。先写了个按这一位1和0的数目多少#xff0c;确定0还是1的东西。感觉不够真#xff0c;又写了个尽量加到相似的比较小的串上的贪心。在和前边的那个组合一下#xff0c;换了换顺序。。。好吧就过了13组样例。。… D.Distinctive Character 看到样例第一个反应贪心。先写了个按这一位1和0的数目多少确定0还是1的东西。感觉不够真又写了个尽量加到相似的比较小的串上的贪心。在和前边的那个组合一下换了换顺序。。。好吧就过了13组样例。。。正解如下考虑如何求出所有2^k个状态与这n个串的最大相似度。起初的n个串的答案显然为k那改变一个位置相似度就改变为k-1对于一个状态越早算出来的相似度越大那么就可以直接bfs求出所有状态的最大相似度了。答案就是取最小值的状态。 #include bits/stdc.h
#define mem(W) memset(W,0,sizeof(W))
using namespace std;
int n, k, a[123], b[123];
char s[25];
int q[123],l0,r0;
int main(){scanf(%d%d,n,k);for(int i0;i(1k);i)b[i]-1;for(int i1;in;i) {scanf( %s,s);for(int j0;jk;j) a[i]a[i]*2(s[j]-0);q[r]a[i];r;b[a[i]]k;}while(lr){int Sq[l]; l;for(int i0;ik;i){if(b[S^(1i)]-1){b[S^(1i)]b[S]-1;q[r]S^(1i); r;}}}int MN10000,ans0;for(int i0;i(1k);i){if(MNb[i]){MNb[i];ansi;}}for(int ik-1;i0;--i)printf(%d,!!(ans(1i)));puts();
}E.Emptying the Baltic bfs暴搜的做法很显然一直搜到所有位置都无法流向周围的格子为止但是会tle。考虑剪枝1水位低的地方不能流向高的地方2没有水也不能流了3最重要的一个剪枝/贪心我们尽量先去从当前水位比较高的地方搜用优先队列可以解决。读题能力好差。。。 #include cstdio
#include queue
#define rep(i,a,b) for(int ia;ib;i)
typedef long long ll;
const int N 550;
inline int read() {char cgetchar();int x0,f1;while(c0||c9){if(c-)f-1;cgetchar();}while(c0c9){xx*10c-0;cgetchar();}return x*f;
}
using namespace std;
int dx[]{0, 0, 1, 1, -1, -1, 1, -1};
int dy[]{1,-1, 0,-1, 0, 1, 1, -1};
int n, m, xs, ys;
ll mp[N][N], h[N][N];
struct node{int x,y;bool operator (const node a) const {return h[a.x][a.y] h[x][y];}node(){}node(int a,int b){xa;yb;}
};
inline int inb(int x,int y) {if(xn||x1||ym||y1)return 0;return 1;
}
inline ll solve(node e,node s){ll t;if(mp[s.x][s.y] h[e.x][e.y]) {th[s.x][s.y]-mp[s.x][s.y];h[s.x][s.y]-t;return t;}else {th[s.x][s.y]-h[e.x][e.y];h[s.x][s.y]-t;return t;}return t;
}inline ll bfs(int sx, int sy) {ll ans0;priority_queuenode q;q.push(node(sx,sy));ans (-mp[sx][sy]);h[sx][sy]mp[sx][sy];while(!q.empty()) {node uq.top();q.pop();rep(i,0,7) {int txu.xdx[i], tyu.ydy[i];if(!inb(tx,ty)||mp[tx][ty]0||h[tx][ty] h[u.x][u.y])continue;if(h[tx][ty]mp[tx][ty]) continue;ll tmpsolve(u,node(tx,ty));anstmp;q.push(node(tx,ty));}}return ans;
}
int main() {nread(),mread();rep(i,1,n)rep(j,1,m)mp[i][j]read();xsread(),ysread();printf(%lld\n, bfs(xs,ys));
}G. Galactic Collegiate Programming Contest 用数据结构维护比1队排名靠前的队伍。一眼考虑用优先队列加数组标记感觉删除的复杂度就没有保证状态本身就多还额外加了一些肯定会T就没写。然后考虑用set删除操作就很方便然而还是T了。于是膜了题解。。。还学了很多神奇的操作%%%用multiset的话有很多重复的值时间就更优秀了。 #include bits/stdc.h
#define rep(i,a,b) for(int ia;ib;i)
const int N 1e5 100;
typedef long long ll;
using namespace std;
struct node{int x,y;node(){}node(int a,int b){xa;yb;}bool operator (const node a)const {if(a.y!y) return y a.y;return x a.x;}
};
multisetnode s;
int n,m,t,p,a[N],b[N];
int main() {scanf(%d%d,n,m);rep(i,1,m) {scanf(%d%d,t,p);if(t!1) {if(node(a[t],b[t]) node(a[1],b[1])) s.erase(s.find(node(a[t],b[t])));a[t]p;b[t];s.insert(node(a[t],b[t]));}else {a[t]p;b[t];}while(!s.empty()!(*--s.end()node(a[1],b[1]))) s.erase(--s.end());printf(%d\n,s.size()1);}
}转载于:https://www.cnblogs.com/RRRR-wys/p/9086143.html