2024牛客暑期多校训练营5 赛后补题
B.珑
题意:若干
2
×
1
2\times 1
2×1的多米诺骨牌去填充
n
×
m
n\times m
n×m的矩形,有两种规则,规则一:短边不能相接;规则二:长边不能相接。
题解:
无规则:除了两边均是奇数的一定可以;
两规则都有:只能是
1
×
2
1\times 2
1×2或
2
×
1
2\times 1
2×1的矩形可以;
只有规则一:除去
1
×
2
n
1\times 2n
1×2n或
2
n
×
1
2n\times 1
2n×1其他都可以。
只有规则二:只能是
1
×
2
n
1\times 2n
1×2n或
2
n
×
1
2n\times 1
2n×1。
#include <bits/stdtr1c++.h>
using namespace std;
#define int long long
const int maxn = 2e5+100;
#define endl "\n"
int b[maxn];
int a[maxn];
void fast()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);}
void solve ()
{
int n,m,a,b;
cin >>n >>m>>a>>b;
bool flag =0;
if( a ==1 && b ==1){ //约束都不在
if( m%2 ==0 || n%2 ==0) flag =1; //任意一边为偶数即可
else { //两边都是奇数不可以
flag =0;
}
}
else if (a ==0 && b ==0){ //都存在
if(m==1 && n==2 || n==1 && m==2) flag =1;
else flag =0;
}
else if (a ==0 && b ==1){ //短边不,长边可
if( m%2 ==1 && n%2 ==1) flag =0;
else if ( m%2 ==0 && n%2 ==0) flag =1;
else { //一偶一奇
int p,q; //p奇q偶
if( n%2 ==1) p=n,m=q;
else q =n, p=m;
if( p%3 ==2 || p%3 ==0) flag =1;
else { //余数为1
if((m==1 || n==1) && max(m,n)>2) flag =0;
else flag =1;
}
}
}
else { //短边可长边不
if(n == 1 && m % 2 == 0){
flag =1;
}
else if(m == 1 && n % 2 == 0){
flag =1;
}
else {
flag =0;
}
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
signed main ()
{
fast();
int t; cin >> t;
while(t--){
solve();
}
}
E.安
题意:May和Ray各有
n
n
n个骑士,分别按照顺序站成一排,编号为
1
n
1~n
1 n,其中,May的骑士生命值为
a
i
a_{i}
ai,Ray的骑士生命值为
b
i
b_{i}
bi,每次选择编号为
i
i
i的骑士攻击对方骑士,使对方骑士生命值减一,May先行,问May最后剩余多少骑士。
题解:
⌈
∑
(
a
i
=
b
i
)
2
⌉
\lceil\frac{\sum(a_{i} = b_{i})}{2}\rceil
⌈2∑(ai=bi)⌉+
∑
(
a
i
>
b
i
)
\sum(a_{i}>b_{i})
∑(ai>bi)
#include<bits/stdtr1c++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn = 1e5+20;
int a[maxn];
int b[maxn];
void solve(){
int ans =0;
int cnt =0;
int n; cin >> n;
for(int i=1 ;i<=n;i++){
cin >> a[i];
}
for(int i=1 ;i<=n;i++){
cin >> b[i];
}
for(int i=1;i<=n;i++){
if(a[i] >b[i]) ans++;
else if( a[i] == b[i]) cnt++;
}
ans = ans+ ceil(1.0*cnt/2);
cout<<ans<<endl;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
signed main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
L.知
题是队友AC的
#include <bits/stdtr1c++.h>
//I
using namespace std;
#define int long long
const int maxn = 150;
#define endl "\n"
const int mod = 998244353;
int a[maxn];
void fast()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);}
void solve ()
{
int n; cin >> n;
int ans =1;
for(int i=1;i<=n; i++){
cin >> a[i];
}
int cnt =1; int sum =0;
while( sum <1000000 && cnt>0 ){
cnt =0;
sum++;
for(int i=n; i>=2;i--){
if(a[i] >a[i-1]){
a[i]--; a[i-1]++;
cnt++;
}
}
}
for(int i=1;i<=n;i++){
ans = (ans*(a[i]%mod))%mod;
}
cout<<ans<<endl;
memset(a,0,sizeof(a));
}
signed main ()
{
fast();
int t; cin >> t;
while(t--){
solve();
}
}
标签:cin,int,多校,else,2024,flag,maxn,补题,&&
From: https://blog.csdn.net/qq_50196144/article/details/140810042