訓練情況
賽後反思
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;
}