2017ACM-ICPC沈阳区域赛
I-Little Boxes【大数】
hdu6225 http://acm.hdu.edu.cn/showproblem.php?pid=6225
题意:
就是给四个大数,输出和。
思路:
java大法好。用long longWA了一发
import java.math.BigInteger;
import java.util.Scanner; public class Main { //static Scanner scan;
//static BigInteger a, b, c, d;
static public void main(String[] args){
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
BigInteger a, b, c, d;
for(int i = 0; i < t; i++){
a = scan.nextBigInteger();
b = scan.nextBigInteger();
c = scan.nextBigInteger();
d = scan.nextBigInteger();
BigInteger ans = a.add(b).add(c).add(d); System.out.println(ans);
} }
}
K-Rabbits
hdu6227 http://acm.hdu.edu.cn/showproblem.php?pid=6227
#include <bits/stdc++.h> using namespace std;
const int maxn = + ; int a[maxn]; int main()
{
int T;
cin >> T;
while (T--) {
int N;
cin >> N;
int ans = ;
for (int i = ; i < N; i++) {
scanf("%d", a+i);
if (i >= )
ans += a[i]-a[i-]-;
}
ans -= min(a[]-a[]-, a[N-]-a[N-]-);
cout << ans << endl;
}
return ;
}
/*
5
6
1 3 5 7 9 11
6
1 3 5 7 9 12
*/
F-Haron and His Triangle【大数】【规律】
hdu6222 http://acm.hdu.edu.cn/showproblem.php?pid=6222
题意:一个三角形的边长分别是t -1, t, t+1,要求他的面积是整数。问大于等于n的最小的t是多少。
思路:首先海伦公式推出一个式子。打了前10000的表,czc秒看出递推公式。i+1 = 4 * i - (i-1)。又一次java大法。因为刚好10^30忘记放进去了WA了一发,下次还是要注意不要开刚好的,稍微大一点。
import java.math.BigInteger;
import java.util.Scanner; public class Main { //static Scanner scan;
//static BigInteger a, b, c, d;
static BigInteger[] num = new BigInteger[100000];
static public void main(String[] args){
Scanner scan = new Scanner(System.in);
num[1] = new BigInteger("4");
num[2] = new BigInteger("14");
BigInteger maxn = new BigInteger("10");
maxn = maxn.pow(31);
//System.out.println(maxn);
int i;
for(i = 3; ; i++){
num[i] = new BigInteger("0");
BigInteger x = new BigInteger("4");
BigInteger tmp = BigInteger.ZERO;
tmp = num[i - 1].multiply(x);
tmp = tmp.subtract(num[i - 2]);
if(tmp.compareTo(maxn) == 1)break;
else num[i] = tmp;
} //System.out.println(i);
int t = scan.nextInt();
for(int cas = 1; cas <= t; cas++){
BigInteger n = scan.nextBigInteger();
for(int j = 1; j <= i; j++){
if(num[j].compareTo(n) != -1){
System.out.println(num[j]);
break;
}
}
}
}
}
L-Tree【DFS】
hdu6228 http://acm.hdu.edu.cn/showproblem.php?pid=6228
题意:
给一棵有n个节点的树上k种颜色。边集Ei表示使颜色i的所有节点联通的最小边集。求所有边集E的交集的最大值。
思路:
一条边可行或是不可行,就看他连接的两块。如果两块的大小都大于等于k,那么这条边肯定是交集的一部分,因为肯定存在一种上色方案使得左边k种颜色右边k种,而且大家肯定都要经过这条边,所以这条边肯定在交集里面。DFS一遍。
正好碰上大二他们周赛拉了这题自己写了一下
#include <iostream>
#include <set>
#include <cmath>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long LL;
#define inf 0x7f7f7f7f int t, n, k;
const int maxn = 2e5 + ;
struct edge{
int u, v, nxt;
}e[maxn];
int head[maxn], tot;
int cnt_son[maxn]; void addedge(int u, int v)
{
e[tot].v = v;
e[tot].u = u;
e[tot].nxt = head[u];
head[u] = tot++;
e[tot].v = u;
e[tot].u = v;
e[tot].nxt = head[v];
head[v] = tot++;
} void init()
{
tot = ;
for(int i = ; i <= n; i++){
head[i] = -;
cnt_son[i] = ;
}
} void dfs(int rt, int fa)
{
for(int i = head[rt]; i != -; i = e[i].nxt){
if(e[i].v == fa)continue;
dfs(e[i].v, rt);
cnt_son[rt] += cnt_son[e[i].v];
}
cnt_son[rt]++;
} int main()
{
scanf("%d", &t);
while(t--){
scanf("%d%d", &n, &k);
init();
for(int i = ; i < n - ; i++){
int u, v;
scanf("%d%d", &u, &v);
addedge(u, v);
}
dfs(, );
//cout<<1<<endl;
int cnt = ;
/*for(int i = 1; i <= n; i++){
cout<<cnt_son[i]<<endl;
}*/
for(int i = ; i < tot; i++){
int v = e[i].v, u = e[i].u;
if(cnt_son[u] < cnt_son[v]){
swap(u, v);
}
if(cnt_son[v] >= k && n - cnt_son[v] >= k){
cnt++;
}
}
printf("%d\n", cnt / );
}
return ;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn=+; int n,k;
int ans; struct Edge{
int u,v;
Edge(int u=,int v=){this->u=u,this->v=v;}
};
vector<Edge> E;
vector<int> G[maxn];
void init(int l,int r)
{
E.clear();
for(int i=l;i<=r;i++) G[i].clear();
}
void addedge(int u,int v)
{
E.push_back(Edge(u,v));
G[u].push_back(E.size()-);
} int vis[maxn];
int dfs(int now)
{
vis[now]=;
int tot=;
for(int i=;i<G[now].size();i++)
{
Edge &e=E[G[now][i]]; int nxt=e.v;
if(!vis[nxt]) tot+=dfs(nxt);
}
if(n-tot>=k && tot>=k) ans++;
return tot;
} int main()
{
int T;
cin>>T;
while(T--)
{
scanf("%d%d",&n,&k);
init(,n);
for(int i=;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
} memset(vis,,sizeof(vis));
ans=;
dfs();
printf("%d\n",ans);
}
}
M-Wandering Robots【概率】(未)
hdu6229 http://acm.hdu.edu.cn/showproblem.php?pid=6229
题意:
给定一个n*n的矩形,机器人初始在(0,0)。矩形中有k个障碍物,给定他们的坐标。机器人在格子(i,j)时,他走到邻近的可走的格子和停留在原地的概率相同。
问最后机器人停在(x,y)其中x+y>=n-1的概率是多少。
思路:
当我们走了很久以后,每一个格子都已经走到了。那么对于这个正方形来说,每一个小格子都有xi种走法(即自己+相邻的可走的格子数),总的正方形一共有N种走法。对于某一个格子(i,j)有(自己+相邻的可走的格子数)种走法是可以到达自己的。所以答案就是要求区域的走法/所有格子的走法
由于n比较大数组是开不下的,所以只能存障碍。用map来映射一下。
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii; const int maxn=+;
const int maxk=+;
const int dx[]={,,,-};
const int dy[]={,,-,}; int n,k;
map<pii,bool> mp;
int p,q; inline int gcd(int m,int n){return n?gcd(n,m%n):m;}
inline int check(const int &x,const int &y)
{
if(x<||x>=n||y<||y>=n) return ; if((x==||x==n-) && (y==||y==n-)) return ;
else if((x==||x==n-) && (y!=&&y!=n-)) return ;
else if((y==||y==n-) && (x!=&&x!=n-)) return ;
else return ;
} int main()
{
int T;
cin>>T;
for(int kase=;kase<=T;kase++)
{
mp.clear(); scanf("%d%d",&n,&k);
for(int i=,x,y;i<=k;i++)
{
scanf("%d%d",&x,&y);
mp[make_pair(x,y)]=;
} p=*+*(n-)*+(n-)*(n-)/*;
q=*+*(n-)*+(n-)*(n-)*;
for(map<pii,bool>::iterator it=mp.begin();it!=mp.end();it++)
{
int x=((*it).first).first;
int y=((*it).first).second;
if(x+y>=n-) p-=check(x,y);
q-=check(x,y); for(int i=;i<;i++)
{
int nxtx=x+dx[i];
int nxty=y+dy[i];
if(check(nxtx,nxty)> && mp.count(make_pair(nxtx,nxty))==)
{
if(nxtx+nxty>=n-) p--;
q--;
}
}
} int g=gcd(p,q);
printf("Case #%d: %d/%d\n",kase,p/g,q/g);
}
}
G--Infinite Fraction Path【暴力】【规律】(未)
hdu6223 http://acm.hdu.edu.cn/showproblem.php?pid=6223
题意:
给定一个串,第i位会走到第(i*i+1)%n位去。问能表示的最大的数是多少。
思路:
发现循环节很短,暴力。
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int MAX_L = ;
const int MAX_N = + ; int ind[MAX_N];
int ansind[MAX_L];
bool vis[MAX_N]; int main()
{
int T, kase = ;
cin >> T;
while (T--) {
int N;
string num;
cin >> N >> num;
for (ll i = ; i < N; i++)
ind[i] = (i*i+)%N; string ans;
for (int jjj = ; jjj < MAX_L; jjj++)
ans += '';
for (int i = ; i < N; i++) {
int jjj = , iii = i;
while (jjj < MAX_L && num[iii] == ans[jjj]) {
iii = ind[iii];
jjj++;
}
if (num[iii] < ans[jjj])
continue;
while (jjj < MAX_L) {
ans[jjj] = num[iii];
ansind[jjj] = iii;
jjj++;
iii = ind[iii];
}
}
memset(vis, false, sizeof vis);
int j;
for (j = MAX_L-; j >= ; j--) {
if (vis[ansind[j]])
break;
vis[ansind[j]] = true;
}
int jjjjj = ansind[j];
printf("Case #%d: ", kase++);
for (int i = ; i < N; i++) {
if (i < MAX_L)
cout << ans[i];
else {
jjjjj = ind[jjjjj];
cout << num[jjjjj];
}
}
cout << endl;
}
return ;
}
/*
4
3
149
5
12345
7
3214567
9
261025520
*/
C-Empty Convex Polygon【最大空凸包】
poj1259The Picnic & hdu6219
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6219
http://poj.org/problem?id=1259
一份代码A两题。
题意:
给n个点,求一个面积最大的空凸包。
思路:
空凸包,就是一个内部没有其他给定点的凸包。
详细讲解见:https://blog.csdn.net/nyroro/article/details/45268767
总的来说就是先枚举凸包的最左下角的点O。按照极坐标排序。
dp[i][j]表示组成凸包的最后一个三角形的是Oij时的最大面积。dp[i][j]=max(dp[i][j],triangle(O,i,j)+dp[j][k])
再枚举凸包上最后的一个点i,枚举所有比i小的合法的j。
具体讲解见:https://blog.csdn.net/cdsszjj/article/details/79366813
复杂度O(n^3)
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<vector>
#include<map>
#include<set> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL; const int maxn = ;
struct point{
double x, y;
point(){}
point(double _x, double _y):x(_x), y(_y){}
point operator + (const point &b) const{return point(x + b.x, y + b.y);}
point operator - (const point &b) const{return point(x - b.x, y - b.y);}
double operator * (const point &b) const {return x * b.y - y * b.x;}
double len() const {return x * x + y * y;}
/*int operator < (const point &a) const
{
if((*this)*a > 0 || (*this) *a == 0 && len() < a.len())
return 1;
return 0;
}*/ }a[maxn], p[maxn], yuan;
/*bool cmp(const point &a, const point &b)
{
int c = a * b;
if(c == 0)return a.len() < b.len();
return c > 0;
}*/
double dp[maxn][maxn], ans;
int t, n, m;
bool cmp(const point &a, const point &b)
{
int res = (a - yuan) * (b - yuan);
if(res)return res > ;
return (a - yuan).len() < (b - yuan).len();
}
void solve()
{
memset(dp, , sizeof(dp));
sort(p + , p + m + , cmp);
for(int i = ; i <= m; i++){
int j = i - ;
while(j && !((p[i] - yuan) * (p[j] - yuan)))j--;
bool bz = (j == i - );
while(j){
int k = j - ;
while(k && (p[i] - p[k]) * (p[j] - p[k]) > )k--;
double area = fabs((p[i] - yuan) * (p[j] - yuan)) / ;
if(k) area += dp[j][k];
if(bz) dp[i][j] = area;
ans = max(ans, area);
j = k;
}
if(bz){
for(int j = ; j < i; j++){
dp[i][j] = max(dp[i][j], dp[i][j - ]);
}
}
}
} int getint()
{
int i = , f = ;
char c;
for(c = getchar(); (c != '-') && (c < '' || c > ''); c = getchar());
if(c == '-')f = -, c = getchar();
for(;c >= '' && c <= ''; c = getchar())i = (i << ) + (i << ) + c - '';
return i * f;
} int main(){ //scanf("%d", &t);
t = getint();
while(t--){
//scanf("%d", &n);
n = getint();
ans = ;
for(int i = ; i <= n; i++){
cin>>a[i].x>>a[i].y;
}
for(int i = ; i <= n; i++){
yuan = a[i];
m = ;
for(int j = ; j <= n; j++){
if(a[j].y > a[i].y || a[j].y == a[i].y && a[j].x > a[i].x)
p[++m] = a[j];//只取右上角的点
}
solve(); }
printf("%0.1f\n", ans);
}
return ;
}
H-Legends of the Three Kingdoms
题意:
三国杀游戏大模拟。有主公忠臣反贼内奸,告诉你他们的血量,每回合砍一个人,主公忠臣不会互相砍。为最后的胜率。
思路:
因为血量最大是40,4个人 ,所以可以暴力记忆化搜索。
存一下当前这样分数的情况下的胜率。
dfs的时候先判断有没有出现游戏结束,再判断如果当前回合轮到的人死了怎么办
然后就是根据回合砍人,找到胜率最大的更新。
数组刚开始开到45MLE了,然后TLE了。因为用了memset。
其实每次是不需要重新初始化的,因为相当于边跑边打表。反正是不影响的。而且memset emmm...秦皇岛T的还不够开心吗。
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<vector>
#include<map>
#include<set> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL; int t;
int zhugong, zhongchen, fanzei, neijian;
double pzhu[][][][][], pfan[][][][][], pnei[][][][][];
bool vis[][][][][]; struct node{
double pz, pf, pn;
void init()
{
pz = pf = pn = -;
}
//node(){}
//node(double a, double b, double c):pz(a), pf(b), pn(c){}
}; //出牌顺序 主0反1忠2内3
node dfs(int turn, int zhu, int zhong, int fan, int nei)
{
if(vis[turn][zhu][zhong][fan][nei])
return (node){pzhu[turn][zhu][zhong][fan][nei], pfan[turn][zhu][zhong][fan][nei], pnei[turn][zhu][zhong][fan][nei]};
vis[turn][zhu][zhong][fan][nei] = true;
if(zhu == && zhong == && fan == && nei > ){//内奸获胜
pzhu[turn][zhu][zhong][fan][nei] = ;
pfan[turn][zhu][zhong][fan][nei] = ;
pnei[turn][zhu][zhong][fan][nei] = ;
}
else if(zhu == ){//反贼获胜
pzhu[turn][zhu][zhong][fan][nei] = ;
pfan[turn][zhu][zhong][fan][nei] = ;
pnei[turn][zhu][zhong][fan][nei] = ;
}
else if(fan == && nei == ){//主公忠臣获胜
pzhu[turn][zhu][zhong][fan][nei] = ;
pfan[turn][zhu][zhong][fan][nei] = ;
pnei[turn][zhu][zhong][fan][nei] = ;
}
else if(fan == && turn == ){
node tmp = dfs((turn + ) % , zhu, zhong, fan, nei);
pzhu[turn][zhu][zhong][fan][nei] = tmp.pz;
pfan[turn][zhu][zhong][fan][nei] = tmp.pf;
pnei[turn][zhu][zhong][fan][nei] = tmp.pn;
}
else if(zhong == && turn == ){
node tmp = dfs((turn + ) % , zhu, zhong, fan, nei);
pzhu[turn][zhu][zhong][fan][nei] = tmp.pz;
pfan[turn][zhu][zhong][fan][nei] = tmp.pf;
pnei[turn][zhu][zhong][fan][nei] = tmp.pn;
}
else if(nei == && turn == ){
node tmp = dfs((turn + ) % , zhu, zhong, fan, nei);
pzhu[turn][zhu][zhong][fan][nei] = tmp.pz;
pfan[turn][zhu][zhong][fan][nei] = tmp.pf;
pnei[turn][zhu][zhong][fan][nei] = tmp.pn;
}
else{
if(turn == ){
node tmp[];
for(int i = ; i < ; i++)tmp[i].init();
if(fan > ){
tmp[] = dfs((turn + ) % , zhu, zhong, fan - , nei);
}
if(nei > ){
tmp[] = dfs((turn + ) % , zhu, zhong, fan, nei - );
}
double zhumax = max(tmp[].pz, tmp[].pz);
int cnt = ;
double zhus = , fans = , neis = ;
for(int i = ; i < ; i++){
if(zhumax == tmp[i].pz){
cnt++;
zhus += tmp[i].pz;
fans += tmp[i].pf;
neis += tmp[i].pn;
}
}
pzhu[turn][zhu][zhong][fan][nei] = zhus / cnt;
pfan[turn][zhu][zhong][fan][nei] = fans / cnt;
pnei[turn][zhu][zhong][fan][nei] = neis / cnt;
}
else if(turn == ){
node tmp[];
for(int i = ; i < ; i++)tmp[i].init();
if(zhu > ){
tmp[] = dfs((turn+)%, zhu - , zhong, fan, nei);
}
if(zhong > ){
tmp[] = dfs((turn + ) % , zhu, zhong - , fan, nei);
}
if(nei > ){
tmp[] = dfs((turn + ) % , zhu, zhong, fan, nei - );
}
double fanmax = max(tmp[].pf, tmp[].pf);
fanmax = max(fanmax, tmp[].pf);
int cnt = ;
double zhus = , fans = , neis = ;
for(int i = ; i < ; i++){
if(fanmax == tmp[i].pf){
cnt++;
zhus += tmp[i].pz;
fans += tmp[i].pf;
neis += tmp[i].pn;
}
}
pzhu[turn][zhu][zhong][fan][nei] = zhus / cnt;
pfan[turn][zhu][zhong][fan][nei] = fans / cnt;
pnei[turn][zhu][zhong][fan][nei] = neis / cnt;
}
else if(turn == ){
node tmp[];
for(int i = ; i < ; i++)tmp[i].init();
if(fan > ){
tmp[] = dfs((turn + ) % , zhu, zhong, fan - , nei);
}
if(nei > ){
tmp[] = dfs((turn + ) % , zhu, zhong, fan, nei - );
}
double zhongmax = max(tmp[].pz, tmp[].pz);
int cnt = ;
double zhus = , fans = , neis = ;
for(int i = ; i < ; i++){
if(zhongmax == tmp[i].pz){
cnt++;
zhus += tmp[i].pz;
fans += tmp[i].pf;
neis += tmp[i].pn;
}
}
pzhu[turn][zhu][zhong][fan][nei] = zhus / cnt;
pfan[turn][zhu][zhong][fan][nei] = fans / cnt;
pnei[turn][zhu][zhong][fan][nei] = neis / cnt;
}
else if(turn == ){
node tmp[];
for(int i = ; i < ; i++)tmp[i].init();
if(zhu > ){
tmp[] = dfs((turn + ) % , zhu - , zhong, fan, nei);
}
if(zhong > ){
tmp[] = dfs((turn + ) % , zhu, zhong - , fan, nei);
}
if(fan > ){
tmp[] = dfs((turn + ) % , zhu, zhong, fan - , nei);
}
double neimax = max(tmp[].pn, tmp[].pn);
neimax = max(neimax, tmp[].pn);
int cnt = ;
double zhus = , fans = , neis = ;
for(int i = ; i < ; i++){
if(neimax == tmp[i].pn){
cnt++;
zhus += tmp[i].pz;
fans += tmp[i].pf;
neis += tmp[i].pn;
}
}
pzhu[turn][zhu][zhong][fan][nei] = zhus / cnt;
pfan[turn][zhu][zhong][fan][nei] = fans / cnt;
pnei[turn][zhu][zhong][fan][nei] = neis / cnt;
}
}
return (node){pzhu[turn][zhu][zhong][fan][nei], pfan[turn][zhu][zhong][fan][nei], pnei[turn][zhu][zhong][fan][nei]};
} int main(){ scanf("%d", &t);
while(t--){
scanf("%d%d%d%d", &zhugong, &zhongchen, &fanzei, &neijian);
//memset(vis, 0, sizeof(vis));
/*for(int i = 0; i < 4; i++){
for(int a = 0; a <= zhugong; a++){
for(int b = 0; b <= zhongchen; b++){
for(int f = 0; f <= fanzei; f++){
for(int n = 0; n <= neijian; n++){
vis[i][a][b][f][n] = 0;
}
}
}
}
}*/
node ans = dfs(, zhugong, zhongchen, fanzei, neijian);
printf("%.6f %.6f %.6f\n", ans.pz, ans.pf, ans.pn);
}
return ;
}
以及:
本次重现最令人开心的事情哈哈哈哈哈哈哈哈哈哈哈哈
2017ACM-ICPC沈阳区域赛的更多相关文章
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
- 2018 ICPC 沈阳网络赛
2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...
- 2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- 2014ACM/ICPC亚洲区域赛牡丹江站汇总
球队内线我也总水平,这所学校得到了前所未有的8地方,因为只有两个少年队.因此,我们13并且可以被分配到的地方,因为13和非常大的数目.据领队谁oj在之上a谁去让更多的冠军.我和tyh,sxk,doub ...
- 2019 ICPC 上海区域赛总结
2019上海区域赛现场赛总结 补题情况(以下通过率为牛客提交): 题号 标题 已通过代码 通过率 我的状态 A Mr. Panda and Dominoes 点击查看 5/29 未通过 B Prefi ...
- 2017 ICPC/ACM 沈阳区域赛HDU6228
Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- 2017 ICPC/ACM 沈阳区域赛HDU6223
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)
Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...
- 【2017 ICPC亚洲区域赛沈阳站 K】Rabbits(思维)
Problem Description Here N (N ≥ 3) rabbits are playing by the river. They are playing on a number li ...
- 2015沈阳区域赛Meeting(最短路 + 建图)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
随机推荐
- fprintf宏
最近在调试程序,使用printf函数和调试信息都不能在终端输出,所以使用比较笨的方法.将调试信息写到文件中,再查看文件.由于要多次使用fprintf函数,所以将其写成宏. 参考链接: http://w ...
- AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...
- (转)音频输出PCM与LPCM有什么不同
多声道LPCM:无损音轨原始存在格式,概念上等效于wave文件,并不需要运算解码,可直接输入功放进行DA转换,光纤和同轴接口只能传输2声道LPCM,多声道LPCM需要HDMI接口传输. PCM: ...
- node.js执行shell命令
nodejs功能强大且多样,不只是可以实现 服务器端 与 客户端 的实时通讯,另一个功能是用来执行shell命令 首先,引入子进程模块 var process = require('child_pro ...
- (转载)UTF-8和GBK的编码方式的部分知识:重要
GBK的文字编码是双字节来表示的,即不论中.英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1. 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节) ...
- 【Java集合的详细研究6】Java 数组
Java 语言中提供的数组是用来存储固定大小的同类型元素. 声明数组变量 double[] myList; // 首选的方法 或 double myList[]; // 效果相同,但不是首选方法 创建 ...
- uniqid,md5,microtime
<?php header("content-type:text/html;charset=utf-8"); $str = uniqid(md5(microtime(true) ...
- Android ContentProvider、ContentResolver和ContentObserver的使用
1.ContentProvider.ContentResolver和ContentObserver ContentProvider是Android的四大组件之中的一个,可见它在Android中的作用非 ...
- 哈希----字符串----time33
//此处只是获得了字符串的hash值,但是该如何散列到hash表中呢?哪个算法会好些?! 1 //在处理以字符串为键值的哈希时,times33哈希算法有着极快的计算效率和很好的哈希分布 //小写英文单 ...
- 使用Dreamweaver开发php
1.新建站点,开发的目录 2.服务器,服务器的目录 (并修改为“测试”) 3.必须结合WANP5