题解:CF2072E Do You Love Your Hero and His Two-Hit Multi-Target Attacks?
gesong1234 · · 题解
题目传送门:CF2072E。
思路
首先
我们发现如果一个行有
我们按照上述性质按行构造,我们定义
根据暴力可得,我们可以在
记得在每一行不要构造出相同列的节点,具体的可以查看代码。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n=500;
int a[1000];
inline int read(){
char c=getchar();
int f=1,ans=0;
while(c<48||c>57) f=(c==45?f=-1:1),c=getchar();
while(c>=48&&c<=57) ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();
return ans*f;
}
#define pii pair<int,int>
vector<pii>anss;
int cnt1=-1e9;
inline void print(int x,int y){
for (int i=1;i<=y;i++) anss.push_back({x,cnt1++});
}
inline void solve(){
cnt1=-1e9;
int k=read();anss.clear();
int cnt=0;
for (int i=n;i>=2;i--)
while(k>=a[i]) print(++cnt,i),k-=a[i];
printf("%lld\n",anss.size());
for (auto i:anss) printf("%lld %lld\n",i.first,i.second);
}
main(){
for (int i=2;i<=n;i++) a[i]=i*(i-1)/2;
int T=read();
while(T--) solve();
return 0;
}
//Codeforces Round 1006 RP++
//Codeforces Round 1006 RP++
//Codeforces Round 1006 RP++
//Codeforces Round 1006 RP++
//Codeforces Round 1006 RP++