给你一个序列,你需要将这个序列进行三次操作使得 a i = 0 ( 1 ≤ i ≤ n ) a_i=0(1\leq i\leq n) ai=0(1≤i≤n),在操作中你可以选定一个区间 ( l , r ) (l,r) (l,r),然后对于区间里面的每个数字你可以增加 ( r − l + 1 ) ∗ c i ( l ≤ i ≤ r ) (r-l+1) * c_i(l\leq i\leq r) (r−l+1)∗ci(l≤i≤r), c i c_i ci可以随意取,请你输出这三次操作中的 l , r , c 1 ∗ ( r − l + 1 ) . . . . . . l,r,c_1* (r-l+1)...... l,r,c1∗(r−l+1)......。
因为最后要为 0 , 0 , . . . . 0,0,.... 0,0,....,那么我们对于每一个 a i a_i ai,有 − a i ∗ x + a i ∗ ( x − 1 ) -a_i*x + a_i*(x-1) −ai∗x+ai∗(x−1),我们需要将所有区间进行操作的话,那么此时的 x = n x = n x=n,所有就有第一次操作 a i = a i − a i ∗ n a_i=a_i -a_i * n ai=ai−ai∗n,然后 a i = a i + a i ∗ ( n − 1 ) a_i=a_i + a_i * (n - 1) ai=ai+ai∗(n−1),这样就可以让 ( 1 , n − 1 ) (1,n-1) (1,n−1)的数字全部变成 0 0 0,我们还有一次机会,那么就让 a n = 0 a_n=0 an=0就行了。
需要注意的是当 n = 1 n=1 n=1的时候,需要特判一下。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
typedef vector<int> veci;
typedef vector<ll> vecl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
template <class T>
inline void read(T &ret) {
char c;
int sgn;
if (c = getchar(), c == EOF) return ;
while (c != '-' && (c < '0' || c > '9')) c = getchar();
sgn = (c == '-') ? -1:1;
ret = (c == '-') ? 0:(c - '0');
while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
ret *= sgn;
return ;
}
inline void outi(int x) {
if (x > 9) outi(x / 10);putchar(x % 10 + '0');}
inline void outl(ll x) {
if (x > 9) outl(x / 10);putchar(x % 10 + '0');}
const int maxn = 1e5 + 10;
ll a[maxn] = {
0};
int main() {
int n; read(n); for (int i = 1; i <= n; i++) read(a[i]);
if (n == 1) {
printf("1 1\n");
printf("%lld", -a[1]);
printf("\n1 1\n");
printf("0");
printf("\n1 1\n");
printf("0");
} else {
printf("1 %d\n", n);
for (int i = 1; i <= n; i++) printf("%lld ", -a[i] * n);
printf("\n1 %d\n", n - 1);
for (int i = 1; i < n; i++) printf("%lld ", a[i] * (n - 1));
printf("\n%d %d\n", n, n);
printf("%lld", a[n] * (n - 1));
}
return 0;
}