四川省建设厅电子政务网站,有关宠物方面的网站建设方案,企业网站运营问题,wordpress中的网易云今天先发布基础题的题解#xff0c;明天再发布铜牌题和银牌题的题解
L. Z-order Curve 思路#xff1a;这题目说了#xff0c;上面那一行#xff0c;只有在偶数位才有可能存在1#xff0c;那么一定存在这样的数#xff0c;0 ,1,100, 10000,那么反之#xff0c;我们的数…今天先发布基础题的题解明天再发布铜牌题和银牌题的题解
L. Z-order Curve 思路这题目说了上面那一行只有在偶数位才有可能存在1那么一定存在这样的数0 ,1,100, 10000,那么反之我们的数列是行的二倍因此会出现10,1000,100000这样的数因此就可以发现其实组成的数也是由二进制数递推的因此我们可以从高位到低位逐步去找如果相同且为1就变成0如果不同就直接结束输出L即可
#includebits/stdc.h
using namespace std;
#define int long long
int t;
int l,r;
void solve()
{cinlr;for(int i61;i0;i--){int bitl(li)1;int bitr(ri)1;if(bitlbitrbitl1){l-(1LLi);r-(1LLi);}else if(bitl!bitr){coutl\n;return ;}}
}
signed main()
{cint;while(t--){solve();}return 0;
}
F. Infinite Loop 思路这题有一个比较恶心的地方就是说从1小时开始实际上是从0小时开始计算然后我们去计算公差是多少我们现将所有的bi加在一起为sum然后取sum和k的较大值作为公差然后去对题目进行分析我们会发现从第二天开始就去进行等差数列了因此我们只需要计算出来第一天和第二天在什么时候完成即可还有一个特判就是要对小时特判如果小时是0那么天数-1小时k
#includebits/stdc.h
using namespace std;
#define int long long
int n,k,q;
int a[200005];
int b[200005];
int ans1[200005];
int ans2[200005];
int d;
int flag,x;
signed main()
{cinnkq;for(int i1;in;i){cina[i]b[i];a[i]-1;db[i];}dmax(d,k);int t0;for(int i1;in;i){ans1[i]max(t,a[i])b[i];tans1[i];}for(int i1;in;i){a[i]k;}for(int i1;in;i){ans2[i]max(t,a[i])b[i];tans2[i];}for(int i1;iq;i){cinflagx;if(flag1){int dayans1[x]/k;int hourans1[x]%k; if(hour0){day-1;hourk;}coutday1 hour\n;}else{int timeans2[x](flag-2)*d;int daytime/k;int hourtime%k; if(hour0){day-1;hourk;}coutday1 hour\n;}}return 0;
}
B. Rolling Stones 思路很板的一个广搜只需要找到翻转之后每个面上面是什么就可以了同时要确保翻转的时候翻转过去的面等于那个底面上的值
#includebits/stdc.h
using namespace std;
#define int long long
int n;
int a[205][205];
struct node{int x,y;int qian;int zuo;int you;int di;int tmp;
};
dequenode q;
int vis[205][205];
int ans[205][205];
int fx,fy;
void bfs()
{while(!q.empty()){node testq.front();q.pop_front();int xtest.x;int ytest.y;
// coutx y\n;
// couttest.qian test.zuo test.you test.di\n;if(y%20){if(vis[x][y-1]0y-11y-12*x-1a[x][y-1]test.zuo)//向左移动{vis[x][y-1]1;q.push_back((node){x,y-1,test.you,test.qian,test.di,test.zuo,test.tmp1});ans[x][y-1]test.tmp1;} if(vis[x][y1]0y11y12*x-1a[x][y1]test.you)//向右移动{vis[x][y1]1;q.push_back((node){x,y1,test.zuo,test.di,test.qian,test.you,test.tmp1});ans[x][y1]test.tmp1;} if(vis[x-1][y-1]0y-11y-12*(x-1)-1x-11x-1na[x-1][y-1]test.qian)//向上移动{vis[x-1][y-1]1;q.push_back((node){x-1,y-1,test.di,test.zuo,test.you,test.qian,test.tmp1});ans[x-1][y-1]test.tmp1;}}else{if(vis[x][y-1]0y-11y-12*x-1a[x][y-1]test.zuo)//向左移动{vis[x][y-1]1;q.push_back((node){x,y-1,test.you,test.qian,test.di,test.zuo,test.tmp1});ans[x][y-1]test.tmp1;} if(vis[x][y1]0y11y12*x-1a[x][y1]test.you)//向右移动{vis[x][y1]1;q.push_back((node){x,y1,test.zuo,test.di,test.qian,test.you,test.tmp1});ans[x][y1]test.tmp1;} if(vis[x1][y1]0y11y12*(x1)-1x11x1na[x1][y1]test.qian)//向下移动{vis[x1][y1]1;q.push_back((node){x1,y1,test.di,test.zuo,test.you,test.qian,test.tmp1});ans[x1][y1]test.tmp1;}}}
}
signed main()
{cinn;for(int i1;in;i){for(int j1;j2*i-1;j){cina[i][j];}}cinfxfy;if(fx1fy1){cout0\n;return 0;}q.push_back((node){1,1,2,1,3,4,0});vis[1][1]1;bfs();if(ans[fx][fy]0){cout-1\n;}else{coutans[fx][fy]\n;}return 0;
} M. Rejection Sampling 思路这题一开始看起来其实是有点儿乱的不知道在说什么而且也不知道到底要操作什么但是仔细阅读后会发现那个S的概率就是C(n,k)*pi^k(1-pi)^(n-k),若想要满足题目中的S与ai乘正比的话我们需要满足pi/(1-pi)与ai成正比我们可以将比例系数C设为c因此我们可以得到式子
pi/(1-pi)c*ai;
可以得到pic*ai/(1c*ai),可知pi关于c单调递增
cpi/((1-pi)*ai)我们可以去二分c然后去判断pi的和是否是k
然后就解决了
#include bits/stdc.h
using namespace std;
#define int long long
int n, k;
long double a[100005];
bool check(long double c)
{long double ans0;long double x;for(int i1;in;i) {x (c*a[i])/(1.00c*a[i]);ansx;}return ansk;
}
signed main()
{cinnk;for (int i1;in;i) {cina[i];}long double l0.0;long double r1e15;for (int i1;i200;i) {long double mid(lr)/2;if (check(mid)) {lmid;} else {rmid;}}coutfixedsetprecision(10);for (int i 1;in;i) {cout(long double)(l*a[i])/(1.00l*a[i])\n;}return 0;
}