网站开发找哪家好产品做网站推广
news/
2025/9/30 12:54:36/
文章来源:
网站开发找哪家好,产品做网站推广,专业网站建设公司怎么选,电子商务网站建设调查报告题目链接#xff1a;https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意#xff1a;一个长度为n的数组#xff0c;数组的元素都在[L,R]之间#xff0c;并且数组全部元素的和可以被3整除#xff0c;问有多少种方法构建出该数组。答案模1000000007 例 输…题目链接https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意一个长度为n的数组数组的元素都在[L,R]之间并且数组全部元素的和可以被3整除问有多少种方法构建出该数组。答案模1000000007 例 输入 2 1 3输出 3note满足的情况只有[1,2],[2,1],[3,3] 解题思路用dp[i][j]表示长度为i的数组元素大小在[L,R]之间并且元素和模3的余数为j的方案数我们可以计算出[L,R]范围内模3余0\1\2的数的个数,分别设为num0num1num2 我们可以很容易知道dp[1][0]num0dp[1][1]num1dp[1][2]num2而dp[2][0]需要分情况当前1个数和模3余0时第2个数便只能放模3余0的数即有dp[1][0]*num0种当前1个数和模3余1时第2个数便只能放模3余2的数即有dp[1][1]*num2种当前1个数和模3余2时第2个数便只能放模3余1的数即有dp[1][2]*num1种。dp[n][0]即为我们要求的答案。 于是我们便可以得出递推式 dp[i][0]((dp[i-1][0]*num0%moddp[i-1][1]*num2%mod)%moddp[i-1][2]*num1%mod)%mod;dp[i][1]((dp[i-1][0]*num1%moddp[i-1][1]*num0%mod)%moddp[i-1][2]*num2%mod)%mod;dp[i][2]((dp[i-1][0]*num2%moddp[i-1][1]*num1%mod)%moddp[i-1][2]*num0%mod)%mod; 代码 #includeiostream
#includecstdio
#includecstring
#includealgorithm
#includevector
#includestring
#includeset
#includecmath
#includelist
#includedeque
#includecstdlib
#includebitset
#includestack
#includemap
#includequeue
using namespace std;
typedef long long ll;
#define lson l,mid,rt1
#define rson mid1,r,rt1|1
#define pushup() tree[rt]tree[rt1]tree[rt1|1]
const int INF0x3f3f3f3f;
const double PIacos(-1.0);
const double eps1e-6;
const ll mod1e97;
const int maxn100005;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll dp[2000005][5];
ll n,l,r;
int main()
{ios::sync_with_stdio(false); cin.tie(0);cinnlr;ll num0r/3-(l-1)/3;ll num1num0;ll num2num0;int i,j;for(il;ir;i){if(i%30)break;else if(i%31)num1;else num2;}for(jr;ji;j--){if(j%32)break;else if(j%31){num2--; break;}else if(j%30){num1--; num2--;break;}}dp[1][0]num0; dp[1][1]num1; dp[1][2]num2;for(int i2;in;i){dp[i][0]((dp[i-1][0]*num0%moddp[i-1][1]*num2%mod)%moddp[i-1][2]*num1%mod)%mod;dp[i][1]((dp[i-1][0]*num1%moddp[i-1][1]*num0%mod)%moddp[i-1][2]*num2%mod)%mod;dp[i][2]((dp[i-1][0]*num2%moddp[i-1][1]*num1%mod)%moddp[i-1][2]*num0%mod)%mod;}coutdp[n][0]endl;return 0;
} D. Kilani and the Game 题目大意给出一个n*m的地图,最多9个人,每个人至少含有一个城堡同时有每个人的扩张速度即可以连续扩张的次数现在从1-n轮流从各自的城堡开始扩张不可通过障碍求整个地图被扩张完成后各个人所占领城堡的数目。 Examplesinput3 3 21 11.......2output6 3 解题思路开始就是想bfs嵌套先把每一个玩家从1-n的城堡压入第一个队列再每次把第一个队列的第一个元素弹出压入第二个队列继续进行bfs一直不知道哪里错了看了别人博客后才发现那样是错的如果那样做的话对于这个样例是过不了的 4 3 22 11..1....2... 如果那样做可能会输出9 3而正确答案是10 2。 正确做法应该是每次将第一个队列相同编号的城堡压入到第二个队列然后再对第二个队列进行bfs这样就不会出现上面那种情况了 代码 #includeiostream
#includecstdio
#includecstring
#includealgorithm
#includevector
#includestring
#includeset
#includecmath
#includelist
#includedeque
#includecstdlib
#includebitset
#includestack
#includemap
#includequeue
using namespace std;
typedef long long ll;
#define lson l,mid,rt1
#define rson mid1,r,rt1|1
#define pushup() tree[rt]tree[rt1]tree[rt1|1]
const int INF0x3f3f3f3f;
const double PIacos(-1.0);
const double eps1e-6;
const ll mod1e97;
const int maxn100005;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
const int dir[4][2]{{1,0},{-1,0},{0,1},{0,-1}};
struct node{int x,y,id;node(int a,int b,int c):x(a),y(b),id(c){}
};
struct node1{int x,y,id,steps;node1(int a,int b,int c,int d):x(a),y(b),id(c),steps(d){}
};
int n,m,sump,s[10];
vectornode p[10];
char mp[1050][1050];
queuenode que;
queuenode1 que1;
void BFS()
{while(que.size()){node tmpque.front();int idtmp.id;que1.push(node1(tmp.x,tmp.y,tmp.id,0));while(que.size()que.front().idid) //判断第一个队列元素是否为当前压入队列是同一个玩家{que1.push(node1(que.front().x,que.front().y,que.front().id,0));que.pop();}while(que1.size()){node1 nowque1.front();que1.pop();if(now.stepss[now.id]){que.push(node(now.x,now.y,now.id)); //走到最后一步继续压入第一个队列continue;}for(int i0;i4;i){int dxnow.xdir[i][0];int dynow.ydir[i][1];if(dx0dxndy0dymmp[dx][dy].){mp[dx][dy]0now.id;que1.push(node1(dx,dy,now.id,now.steps1));}}}}
}
int main()
{ios::sync_with_stdio(false); cin.tie(0);cinnmsump;for(int i1;isump;i) cins[i];for(int i0;in;i){for(int j0;jm;j){cinmp[i][j];if(mp[i][j]0mp[i][j]9)p[mp[i][j]-0].push_back(node(i,j,mp[i][j]-0)); //同一个玩家的城堡压入同一个向量里}}for(int i1;isump;i)for(int j0;jp[i].size();j)que.push(p[i][j]);BFS();int ans[10];memset(ans,0,sizeof(ans));for(int i0;in;i)for(int j0;jm;j)for(int k1;ksump;k)if(mp[i][j](k0))ans[k];coutans[1];for(int i2;isump;i)cout ans[i];coutendl;return 0;
} 转载于:https://www.cnblogs.com/zjl192628928/p/10303329.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922850.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!