被队友push了,放下计组书刷刷题
A. Ian Visits Mary
显然,我们可以从(0,0)到(x-1,1),再到(x,y)
因为一行以内必然无顶点
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
#define fir for(int i=1;i<=n;i++)
#define rif for(int i=n;i>=1;i--)
#define AC return
#define pleaseqwq 0
using namespace std;
const int N=2e5+10;
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
unordered_map<int,int>ii;
unordered_map<string,int>si;
void solve(){
int a,b;
cin>>a>>b;
cout<<2<<endl;
cout<<a-1<<' '<<1<<endl;
cout<<a<<' '<<b<<endl;
return ;
}
signed main(){
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--) solve();
AC pleaseqwq;
}
B. Grid Reconstruction
通过手写,发现必然在斜着对角加减,即:
+ - + -
- + - +
于是,我们参照样例,把最大的两个放在两边
剩下的填数字即可,然后根据样例检查,保证放入顺序。
样例也提示了奇数尽可能和奇数一行,偶数同理
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
#define fir for(int i=1;i<=n;i++)
#define rif for(int i=n;i>=1;i--)
#define AC return
#define pleaseqwq 0
using namespace std;
const int N=2e5+10;
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
unordered_map<int,int>ii;
unordered_map<string,int>si;
int a[3][N];
void solve(){
int n;
cin>>n;
int cnt=2*n-1;
int beg=1;
for(int i=0;i<n;i+=2){
a[i&1][i]=cnt--;
a[i&1][i+1]=beg++;
a[(i+1)&1][i]=beg++;
a[(i+1)&1][i+1]=cnt--;
}
a[(n-1)&1][n-1]=2*n;
for(int i=0;i<n;i++) cout<<a[0][i]<<' ';
cout<<endl;
for(int i=0;i<n;i++) cout<<a[1][i]<<' ';
cout<<endl;
return ;
}
signed main(){
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--) solve();
AC pleaseqwq;
}
C. Ian and Array Sorting
先考虑中间情况,对任意ai,ai+1进行加减操作。
ai -1 ai+1 -1 ai+1 +1 ai+2 +1
可得对于任意奇偶性相同的,其可以任意变换,即a1,a3,a5可以任意变换
考虑边界情况,此时a1会让a2变换,an会让an-1变换
考虑将其两边界先变为合适的数字,根据任意变换,则中间可以任意变换,且a2和an-1可以作适当变换使得a1和an满足条件。但此时若为奇数个,则a1与an可以加到一块;若为偶数个,则加不到一块。
于是n为奇数必然成立,而n为偶数需要额外讨论。根据上述条件,此时变换前面除最后一个奇数和偶数以外的数字,将其+1或者-1,对应往后传递,将影响变换到最后两位,考虑最后两位大小关系即可。
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
#define fir for(int i=1;i<=n;i++)
#define rif for(int i=n;i>=1;i--)
#define AC return
#define pleaseqwq 0
using namespace std;
const int N=3e5+10;
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
unordered_map<int,int>ii;
unordered_map<string,int>si;
int a[N],b[N];
void solve(){
int n;
cin>>n;
int even=0,odd=0;
fir{
int k;
cin>>k;
if(i&1) odd+=k;
else even+=k;
}
if(n&1||odd<=even) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return ;
}
signed main(){
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--) solve();
AC pleaseqwq;
}