训练情况
赛后反思
guessforces?结论全靠猜?逆天C题构造+大力分类讨论,这谁想得到啊?
A题
我们看 \((r,c)\) 所在的行,其右边的球左移,对答案的贡献为 \(m-c\),接下来再看下面的 \(n-r\) 行的最左边的球,每个球移动到右上角对答案的贡献为 \(m\),接下来就是剩下的球往左移动,每一行对答案的贡献为 \(m-1\),最后累加即可。
#include <bits/stdc++.h>
#define int long longusing 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 longusing 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 longusing 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;
}