怀柔网站制作公司,百家号官网,做一网站困难吗,做试玩网站当天晚上#xff0c;本来想参加一下比赛#xff0c;结果感觉静不下心来做题#xff0c;而且最难受的是读个题都不明白#xff0c;一直在理解题意。
A - Digit Game
分析不难发现#xff1a; 如果nnn是奇数#xff0c;那么最后留下的数字一定是奇数位上的数字#xff0…当天晚上本来想参加一下比赛结果感觉静不下心来做题而且最难受的是读个题都不明白一直在理解题意·。·
A - Digit Game
分析不难发现 如果nnn是奇数那么最后留下的数字一定是奇数位上的数字如果奇数位上的数字至少存在一个奇数那么先手必胜。 如果nnn是偶数那么最后留下的数字一定是偶数位上的数字如果偶数位上的数字至少存在一个凑数那么后手必胜。
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#includeiostream
#includealgorithm
using namespace std;
typedef long long ll;
int n;
int main()
{IO;int T1;cinT;while(T--){cinn;string s;cins;s.s;bool ok;if(n1){ok0;for(int i1;in;i)if(i%21(s[i]-0)%21) ok1;}else{ok1;for(int i1;in;i){if(i%20(s[i]-0)%20) ok0;}}if(ok) cout1\n;else cout2\n;}return 0;
}B - Stairs
首先只要知道每个楼梯的边长那么可以用等差数列求出所有小方块的个数。楼梯的边长2n−12^{n}-12n−1然后只需要一个一个枚举即可。
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#includeiostream
#includealgorithm
using namespace std;
typedef long long ll;
int main()
{IO;int T1;cinT;while(T--){ll x;cinx;ll s0;int res0;ll a1;for(int i1;;i){ll now2*a-1;s1ll*now*(now1)/2;if(sx) res;else break;a1;}coutres\n;}return 0;
}C - Killjoy
这题我也读了很久才理解题意 不难发现最终答案就三种情况{0,1,2}\{0,1,2\}{0,1,2} 000最初所有aixa_ixaix 111存在aixa_ixaix或者∑i1nainx\sum_{i1}^{n}a_inx∑i1nainx如果akxa_kxakx那么它一开始就会被感染一场比赛可以把其余的aia_iai都变成xxxaka_kak用来调整保证改变之和为000 222其余情况答案都是2
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#includeiostream
#includealgorithm
using namespace std;
typedef long long ll;
const int N1010;
int a[N];
int n,x;
int main()
{IO;int T1;cinT;while(T--){cinnx;int s0;bool ok11;bool ok20;for(int i1;in;i){cina[i];if(a[i]!x) ok10;if(a[i]x) ok21;sa[i];}if(ok1) cout0\n;else if(ok2||sn*x) cout1\n;else cout2\n;}return 0;
}D1 - Sage’s Birthday (easy version)
分析可知先把原数组排序然后把前⌊n2⌋\lfloor \frac{n}{2}\rfloor⌊2n⌋的数按顺序插到后⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n⌉的缝隙中的构造结果肯定最优。然后可以扫一遍统计下答案即可。如果原数组的数不同那么不难发现答案一定是⌊n−12⌋\lfloor \frac{n-1}{2}\rfloor⌊2n−1⌋
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#includeiostream
#includealgorithm
using namespace std;
typedef long long ll;
const int N100010;
int a[N],b[N],c[N];
int n;
int main()
{IO;int T1;//cinT;while(T--){cinn;for(int i1;in;i) cina[i];sort(a1,a1n);for(int i1;in/2;i) b[i]a[i];for(int in/21;in;i) c[i-n/2]a[i];cout(n-1)/2\n;for(int i1;i(n1)/2;i){coutc[i] ;if(in/2) coutb[i] ;}cout\n;}return 0;
}D2 - Sage’s Birthday (hard version)
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#includeiostream
#includealgorithm
using namespace std;
typedef long long ll;
const int N100010;
int a[N],b[N],c[N];
int n;
int main()
{IO;int T1;//cinT;while(T--){cinn;for(int i1;in;i) cina[i];sort(a1,a1n);for(int i1;in/2;i) b[i]a[i];for(int in/21;in;i) c[i-n/2]a[i];for(int i1,j1;i(n1)/2;i){a[j]c[i];if(in/2) a[j]b[i];}int res0;for(int i2;in;i)if(a[i]a[i-1]a[i]a[i1]) res;coutres\n;for(int i1;in;i) couta[i] ;cout\n;}return 0;
}E - Decryption
说点儿废话2020/9/20下午在图书馆看了一下这个题好不容易分析出如何构造能够得出答案然后回寝室一直调代码调到12点调代码能力还是太菜了不能把想法快速实现还要多练。现在已经凌晨了2020/9/21明天早上第一节没有课爬起来把题解补了。
考虑将nnn分解质因数可得np1a1×p2a2×…×piainp_1^{a_1}×p_2^{a_2}×\dots\ ×p_i^{a_i}np1a1×p2a2×… ×piai 考虑这样一组排列方式的构造{[p1,p12,…,p1a1],[],[pi,pi2,…,piai]}\{[p_1,p_1^2,\dots, p_1^{a_1}],[],[p_i,p_i^2,\dots, p_i^{a_i}]\}{[p1,p12,…,p1a1],[],[pi,pi2,…,piai]}不难发现中间[][][]中只要包含p1p_1p1那么无论怎么排列一定不互质存在相同因子p1p_1p1因此中间括号只需要用dfs求出所有包含p1p_1p1质因子的约数即可但是我们需要让nnn放置在最后。根据dfs的性质[][][]中的最后一个数一定有质因子pip_ipi当前最后一个质因数那么我们下一个排的时候就要排pip_ipi因此每次需要和当前最后一个质因数交换一下位置。
根据上述构造可得当且仅当一个数的质因数是2并且质因子的指数都是1np1×p2np_1×p_2np1×p2才需要插入一个最小公倍数否则都不需要插入最小公倍数
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#includeiostream
#includealgorithm
#define p first
#define a second
using namespace std;
typedef pairint,int pii;
typedef long long ll;
const int N200010;
pii d[N];
int cnt,n,idx;
ll ans[N];
void divide(int x)
{idxcnt0;for(int i2;ix/i;i)if(x%i0){d[cnt].pi;d[cnt].a0;while(x%i0) x/i,d[cnt].a;}if(x1) {d[cnt].px;d[cnt].a1;}
}
void dfs(int u,ll now)
{for(int iu;icnt;i){ll p1;for(int j1;jd[i].a;j){p*d[i].p;if(now*p!n) ans[idx]now*p;dfs(i1,now*p);}}
}
int main()
{IO;int T1;cinT;while(T--){cinn;divide(n);for(int i1;icnt;i){ll p1;for(int k1;kd[i].a;k) {p*d[i].p;if(p!n) ans[idx]p;//注意把n放在最后}//括号间的数p1;for(int k1;kd[i].a;k) {p*d[i].p;dfs(i1,p);}if(icnt) swap(d[i1],d[cnt]);}for(int i1;iidx;i) coutans[i] ;coutn\n;if(cnt2d[1].a1d[2].a1) cout1\n;else cout0\n;}return 0;
}要加油哦~