E. Rectangular Congruence
我们考虑对 ar1,c1+ar2,c2 ≢ ar1,c2+ar2,c1(modn) (同余情况下 不同也是可以同时加任意数的 可以感性理解一下)
ar1,c1 - ar1,c2 ≢ ar2,c1 - ar2,c2(modn)
这个的意思就是我们没一行的公差不同即可
我们可以按照每一行 0 1 2 3 的公差分别以bi构造即可
实际上 我们设 |c2-c1|=k
该等式就变成了 k*|dr1-dr2|%n!=0 显然我们k是<n的 我们只要让di-dj没有n即可
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
void solve() {
int n;cin >> n;
for (int i = 0; i < n; i++) {
int b;cin >> b;
for (int j = 0; j < n; j++) {
cout << (i * (j - i + n) + b) % n << " ";
}
cout<<endl;
}
}
signed main(){
fast
int T;cin>>T;
while(T--) {
solve();
}
return ~~(0^_^0);
}
D. Slime Escape
我们考虑贪心
我们考虑从任意方向出发 记录能走到的哪,最大的能到达的health是多少
如果走不动了 那我们再倒回去走 这时候我们考虑最优情况就是到达最大health的时候倒回去
这样重复即可
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
void solve() {
int n,k;cin>>n>>k;
vector<int>a(n+1);
for(int i=1;i<=n;i++)cin>>a[i];
int L=k-1,R=k+1,L_sum=0,R_sum=0,Lmx=0,Rmx=0;
while(1<=L&&R<=n){
bool flag=1;
while(1<=L&&L_sum+Rmx+a[k]+a[L]>=0){
flag=0;
L_sum+=a[L--];
Lmx=max(Lmx,L_sum);
}
while(R<=n&&R_sum+Lmx+a[k]+a[R]>=0){
flag=0;
R_sum+=a[R++];
Rmx=max(Rmx,R_sum);
}
if(flag){NO return;}
}
YES
}
signed main(){
fast
int T;cin>>T;
while(T--) {
solve();
}
return ~~(0^_^0);
}
标签:const,int,sum,Codeforces,c2,c1,822,Round,define
From: https://www.cnblogs.com/ycllz/p/16725815.html