【CodeForces训练记录】Codeforces Global Round 27
训练情况
赛后反思
guessforces?结论全靠猜?逆天C题构造+大力分类讨论,这谁想得到啊?
A题
我们看 \((r,c)\) 所在的行,其右边的球左移,对答案的贡献为 \(m-c\),接下来再看下面的 \(n-r\) 行的最左边的球,每个球移动到右上角对答案的贡献为 \(m\),接下来就是剩下的球往左移动,每一行对答案的贡献为 \(m-1\),最后累加即可。
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
int n,m,r,c; cin>>n>>m>>r>>c;
int ans = 0;
ans += m-c;
ans += (n-r)*(m);
ans += (n-r)*(m-1);
cout<<ans<<endl;
}
signed main(){
int T; cin>>T; while(T--)
solve();
return 0;
}
B题
规律题,我们打表 \(n \le 9\) 我们发现奇数情况就是 \(n-4\) 个 \(3\) 再加上 \(6366\),偶数情况就是 \(n-2\) 个 \(3\) 再加上 \(66\)。
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
int x; cin>>x;
if(x==1||x==3){
cout<<-1<<endl;
return;
}
if(x&1){
for(int i = 1;i<=x-4;i++) cout<<3;
cout<<6366<<endl;
} else {
for(int i = 1;i<=x-2;i++) cout<<3;
cout<<66<<endl;
}
}
signed main(){
int T; cin>>T; while(T--)
solve();
return 0;
}
C题
构造+逆天分类讨论,我们还是打表,我们发现奇数情况的构造可以为 \([2,1,3,4,5,6,7,8,9,\cdots]\) 这种,部分偶数情况也是这种,通过更大的数据打表我们发现 \(2\) 的幂都可以这样构造。
所以我们就剩下偶数情况下不是 \(2\) 的幂的构造,我们还是打表观察发现只需要把 \(\le n\) 最大的 \(2^i\) 放在最后面即可。
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
int n; cin>>n;
vector<int> a(n + 1);
if(n&1) {
a[1] = 2;
a[2] = 1;
for(int i = 3;i<=n;i++) a[i] = i;
} else {
int x = n;
while(x%2==0) x/=2;
if(x!=1){
int xx = n;
int len = 0;
while(xx) xx/=2,len++;
len--;
int tot = 0;
int base = pow(2,len)-1;
for(int i = 1;i<=n-1;i++){
++tot;
if(tot==base) ++tot;
a[i] = tot;
}
a[n] = base;
} else {
a[1] = 2;
a[2] = 1;
for(int i = 3;i<=n;i++) a[i] = i;
}
}
int cur = 0;
for(int i = 1;i<=n;i++){
if(i&1) cur=cur&a[i];
else cur=cur|a[i];
}
cout<<cur<<endl;
for(int i = 1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
signed main(){
int T; cin>>T; while(T--)
solve();
return 0;
}