网站开发开票,江门有那几间公司做网站的,知乎app开发公司,wordpress查看主题mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #includebits/stdc.h
using namespace std;
//无脑dp
#define ll long long
#define A 2222222
const ll mod1e97;
//设f[x][5][2]为当前是第x个格子,当前填什么 0前面填1后面填
ll f[A][5][2];
/… mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #includebits/stdc.h
using namespace std;
//无脑dp
#define ll long long
#define A 2222222
const ll mod1e97;
//设f[x][5][2]为当前是第x个格子,当前填什么 0前面填1后面填
ll f[A][5][2];
//0表示0雷,1表示一个雷 2表示两个雷 3*
ll n,ans0;
char ch[A];
void debuger(){for(ll i1;in;i,puts())for(ll j0;j3;j){if(j1){printf(f[%lld][1][0]%lld f[%lld][1][1]%lld ,
i,f[i][1][0],i,f[i][1][1]);}else printf(f[%lld][%lld]%lld ,i,j,f[i][j][0]);}
}
int main(){scanf(%s,ch1);nstrlen(ch1);if(ch[1]*){f[0][1][1]1;}else if(ch[1]?){f[0][1][1]1;f[0][0][0]1;}else if(ch[1]1){f[0][0][0]1;}else if(ch[1]0){f[0][0][0]1;}for(ll x1;xn;x){if(ch[x]?){f[x][3][0](f[x-1][1][1]f[x-1][2][0]f[x-1][3][0])%mod;f[x][0][0](f[x-1][1][0]f[x-1][0][0])%mod;f[x][2][0](f[x-1][3][0])%mod;f[x][1][0](f[x-1][3][0])%mod;f[x][1][1](f[x-1][1][0]f[x-1][0][0])%mod;}else if(ch[x]*){f[x][3][0](f[x-1][1][1]f[x-1][2][0]f[x-1][3][0])%mod;//若当前格子是雷,前面格子可以是1且雷在后,两个雷标记,雷}else if(ch[x]0){f[x][0][0](f[x-1][1][0]f[x-1][0][0])%mod;//若当前格子是0雷标记,前面格子可以是0雷标记或1雷但雷在前}else if(ch[x]2){f[x][2][0](f[x-1][3][0])%mod;//若当前格子是2雷标记,前面格子必须是雷}else if(ch[x]1){f[x][1][0]f[x-1][3][0];//若雷在前,前面格子必须是雷f[x][1][1](f[x-1][1][0]f[x-1][0][0])%mod;//若雷在后,前面格子可以是1雷标记但雷在前,或是无雷标记}}
// debuger();ans(ansf[n][1][0]f[n][0][0])%mod;ans(ansf[n][3][0])%mod;printf(%lld\n,ans);
} water 题解 一道比较水的贪心 或是一道比较难的图论 看你怎么做了 下面是贪心做法 不断地去找最低的那个小块进行灌水这是肯定的。 由于需要一直找最小值所以用到最小堆来进行优化。 初始化边界是肯定不能积水的因为肯定会流出来。所以在一开始所有的边界都设置为已访问标记。将边界上所有的点都加进堆里并不断地调整堆。 在边界中取最低的那一个小块进行扩展记录这个最小的节点高度为t 扩展到的内部节点如果比t小那么就灌水也就是将扩展到的节点高度上升到t不要忘了统计ans。并同时将上升后的点加进堆。如果扩展到的点比t高也就相当于一个边界将这个点直接加进堆。 注意如果为$-$那么它一定是要积水的而且至少积水到0 代码 #includebits/stdc.h
using namespace std;
#define ll long long
#define A 510
ll h[A][A],a[A][A];
bool vis[A][A];
struct node{ll x,y,high;friend bool operator (const node a,const node b){return a.highb.high;}
};priority_queuenode q;
ll n,m;
const ll nowx[5]{0,1,-1,0,0};
const ll nowy[5]{0,0,0,1,-1};
bool pan(ll x,ll y){if(x1||xn||y1||ym||vis[x][y]) return 0;return 1;
}
void dfs(ll x,ll y,ll v){vis[x][y]1;if(a[x][y]v){node o;o.xx,o.yy,o.higha[x][y];q.push(o);return ;}h[x][y]v-a[x][y];for(ll i1;i4;i){ll xnowxnowx[i],ynowynowy[i];if(pan(xnow,ynow))dfs(xnow,ynow,v);}
}
int main(){scanf(%lld%lld,n,m);for(ll i1;in;i)for(ll j1;jm;j){scanf(%lld,a[i][j]);if(a[i][j]0){h[i][j]0-a[i][j];a[i][j]0;}if(i1||j1||in||jm){node b;b.xi,b.yj,b.higha[i][j];q.push(b);vis[i][j]1;}}while(!q.empty()){node oq.top();q.pop();ll xo.x,yo.y,higho.high;for(ll i1;i4;i){ll xnowxnowx[i],ynowynowy[i];if(pan(xnow,ynow))dfs(xnow,ynow,high);}}for(ll i1;in;i,puts())for(ll j1;jm;j){printf(%lld ,h[i][j]);}
} gcd 题解 奇妙的莫比乌斯,等我强了再补 代码 #includebits/stdc.h
using namespace std;
#define ll int
#define A 1001010
ll vis[A],mu[A],prime[A];
long long g[A],s[A],su[A];
ll get_[A];
long long ans,cnt0;
void get__mu(ll n){mu[1]1;for(ll i2;i500000;i){if(!vis[i]){prime[cnt]i,mu[i]-1;}for(ll j1;jcntprime[j]*1ll*i500000;j){vis[prime[j]*1ll*i]1;if(i%prime[j]0) break;else mu[i*1ll*prime[j]]-mu[i];}}
}
ll n,m;
void work(ll x,ll d){
// printf(x%lld\n,x);for(ll i1;isqrt(x);i)if(!(x%i)){s[i]d;
// printf(x%lld i%lld \n,x,i);if(i*1ll*i!x)s[x/i]d;ans-mu[i]*1ll*g[i];if(i*1ll*i!x)ans-mu[x/i]*1ll*g[x/i];g[i]s[i]*1ll*(s[i]-1)/2;if(i*1ll*i!x)g[x/i]s[x/i]*1ll*(s[x/i]-1)/2;ansmu[i]*1ll*g[i];if(i*1ll*i!x)ansmu[x/i]*1ll*g[x/i];}
// for(ll i2;ix;i){
// printf(s[%lld]%lld\n,i,s[i]);
// } printf(%lld\n,ans);
}
int main(){scanf(%d%d,n,m);get__mu(510000);
// printf(mu%lld\n,prime[3]);for(ll i1;in;i)scanf(%d,su[i]);for(ll i1,a;im;i){scanf(%d,a);ll xsu[a];if(get_[a]0)work(x,1),get_[a]1;else work(x,-1),get_[a]0;}
} View Code 转载于:https://www.cnblogs.com/znsbc-13/p/11364485.html