ABC_406
ABC_406
可恶看番看上头,忘记是8点开始了。
A - Not Acceptable
超 · 水题。两分钟(加上打开VScode的时间),一遍过。
code
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=1e6+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int a,b,c,d;
fuck void solve()
{
cin>>a>>b>>c>>d;
if(c<a)cout<<"Yes"<<"\n";
else if(c==a&&d<=b)cout<<"Yes"<<"\n";
else cout<<"No"<<"\n";
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
B - Product Calculator
常 · 水题。直接__int128暴力运算。15分钟,一遍过。(至于为什么这种题会花了15分钟,我总不能说我是一边玩舟一边和妹子聊天一边打比赛吧)
code
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=1e6+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck i8 read()
{
i8 x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(i8 x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
i8 n,k,p=1;
i8 a[N],ans=1;
fuck void solve()
{
n=read(),k=read(),k-=1;
while(k--)p*=10;
// write(p);cout<<"\n";
for(int i=1;i<=n;i++)
{
a[i]=read(),ans=ans*a[i];
// write(ans);cout<<"\n";
if(ans>=p*10)ans=1;
}
write(ans);
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
C - ~
真 · 正常题。赛场上的思路是将 $ N $ 个数的关系处理出来,储存在数组 $ p $ 里,如果 $ a_{i}<a_{i+1} $ ,那么 $ p[i]=1 $ ,反之 $ p[i]=2 $ 。
首先在此定义:一个极大的合法连续子串,满足子串开头前加一个数会使子串不合法,子串末尾加一个数会使子串不合法。
由于题目中说一个合法的连续子串开头需满足 $ a_{1}<a_{2} $ ,也就是在p数组中需要以1起手,一段合法的连续子串就可以表示为 : $ pre个1+无所谓个2+bac个1 $ 。其中 $ pre个1 $ 前面和 $ bac个1 $ 后面都是2或者没有,这样就找到了一个极大子串,而这一个子串的答案为 $ pre*bac $ 。同时,显而易见,该极大子串的 $ bac $ 为下一个极大子串的 $ pre $ ,相当于每次只需要处理 $ bac $ 即可,并记得最后加上末尾一段。
时间复杂度:$ O(n) $ 。
code
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=1e6+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int n,ans=0;
int a[N];
int p[N];
fuck void solve()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(i>=2)p[i-1]=(a[i]>a[i-1]?1:2);
}
int pre=0,bac=0,f=1;
for(int i=1;i<=n-1;i++)
{
if(p[i-1]==2&&p[i]==1)f=3;//开始计算bac
if(p[i]==1&&f==1)pre++;
if(p[i]==1&&f==3)bac++;
// cout<<pre<<" "<<bac<<"\n";
if(p[i-1]==1&&p[i]==2&&f==3)f=1,ans+=pre*bac,pre=bac,bac=0;//进入下一个子串
}
cout<<ans+pre*bac<<"\n";//最后加上末尾
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
D - Garbage Removal
次 · 正常题。由于晚了半个小时才开,结果没来得及敲代码。个人感觉比 $ C $ 题简单。赛后补题,20分钟,两遍过。
由于行列都很大,显然不可能存图,考虑只需要维护一行或是一列的信息,于是选择把行列分开维护。
开两个 $ vector $ ,分别表示,每一行或列对于所有列或行的影响。并用两个 $ ans $ 数组维护行列的答案。具体地,当 $ x $ 行被删除时,遍历行 $ vector[x] $ ,将对应的列 $ ans-- $ ,同时将该行标记,下次询问时直接输出 $ 0 $ 。对于列同理。
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=2e5+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int n,m,k;
vector<int>h[N],l[N];
int ans1[N],ans2[N],vis1[N],vis2[N];
fuck void solve()
{
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
cin>>n>>m>>k;
for(int i=1;i<=k;i++)
{
int x,y;cin>>x>>y;
h[x].push_back(y);ans1[x]++;
l[y].push_back(x);ans2[y]++;
}
int q=read();
while(q--)
{
int op=read(),c=read();
if(op==1)
{
if(vis1[c]==1){cout<<0<<"\n";continue;}
vis1[c]=1;
cout<<ans1[c]<<"\n";
for(auto v:h[c])ans2[v]--;
}
else
{
if(vis2[c]==1){cout<<0<<"\n";continue;}
vis2[c]=1;
cout<<ans2[c]<<"\n";
for(auto v:l[c])ans1[v]--;
}
}
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// for(int i=1;i<=tot;i++)cout<<prime[i]<<"\n";
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
待续
ABC_406
可恶看番看上头,忘记是8点开始了。
A - Not Acceptable
超 · 水题。两分钟(加上打开VScode的时间),一遍过。
code
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=1e6+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int a,b,c,d;
fuck void solve()
{
cin>>a>>b>>c>>d;
if(c<a)cout<<"Yes"<<"\n";
else if(c==a&&d<=b)cout<<"Yes"<<"\n";
else cout<<"No"<<"\n";
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
B - Product Calculator
常 · 水题。直接__int128暴力运算。15分钟,一遍过。(至于为什么这种题会花了15分钟,我总不能说我是一边玩舟一边和妹子聊天一边打比赛吧)
code
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=1e6+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck i8 read()
{
i8 x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(i8 x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
i8 n,k,p=1;
i8 a[N],ans=1;
fuck void solve()
{
n=read(),k=read(),k-=1;
while(k--)p*=10;
// write(p);cout<<"\n";
for(int i=1;i<=n;i++)
{
a[i]=read(),ans=ans*a[i];
// write(ans);cout<<"\n";
if(ans>=p*10)ans=1;
}
write(ans);
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
C - ~
真 · 正常题。赛场上的思路是将 $ N $ 个数的关系处理出来,储存在数组 $ p $ 里,如果 $ a_{i}<a_{i+1} $ ,那么 $ p[i]=1 $ ,反之 $ p[i]=2 $ 。
首先在此定义:一个极大的合法连续子串,满足子串开头前加一个数会使子串不合法,子串末尾加一个数会使子串不合法。
由于题目中说一个合法的连续子串开头需满足 $ a_{1}<a_{2} $ ,也就是在p数组中需要以1起手,一段合法的连续子串就可以表示为 : $ pre个1+2+无所谓个2+bac个1 $ 。其中 $ pre个1 $ 前面和 $ bac个1 $ 后面都是2或者没有,这样就找到了一个极大子串,而这一个子串的答案为 $ pre*bac $ 。同时,显而易见,该极大子串的 $ bac $ 为下一个极大子串的 $ pre $ ,相当于每次只需要处理 $ bac $ 即可,并记得最后加上末尾一段。
时间复杂度:$ O(n) $ 。
code
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=1e6+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int n,ans=0;
int a[N];
int p[N];
fuck void solve()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(i>=2)p[i-1]=(a[i]>a[i-1]?1:2);
}
int pre=0,bac=0,f=1;
for(int i=1;i<=n-1;i++)
{
if(p[i-1]==2&&p[i]==1)f=3;//开始计算bac
if(p[i]==1&&f==1)pre++;
if(p[i]==1&&f==3)bac++;
// cout<<pre<<" "<<bac<<"\n";
if(p[i-1]==1&&p[i]==2&&f==3)f=1,ans+=pre*bac,pre=bac,bac=0;//进入下一个子串
}
cout<<ans+pre*bac<<"\n";//最后加上末尾
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
D - Garbage Removal
次 · 正常题。由于晚了半个小时才开,结果没来得及敲代码。个人感觉比 $ C $ 题简单。赛后补题,20分钟,两遍过。
由于行列都很大,显然不可能存图,考虑只需要维护一行或是一列的信息,于是选择把行列分开维护。
开两个 $ vector $ ,分别表示,每一行或列对于所有列或行的影响。并用两个 $ ans $ 数组维护行列的答案。具体地,当 $ x $ 行被删除时,遍历行 $ vector[x] $ ,将对应的列 $ ans-- $ ,同时将该行标记,下次询问时直接输出 $ 0 $ 。对于列同理。
#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define i8 __int128
#define int long long
#define fuck inline
#define lb long double
using namespace std;
// typedef longlong ll;
const int N=2e5+5,M=1e6+520,mod=1e9+7;
const int inf=INT_MAX,INF=1e9+7;
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118;
// const int M=mod1*mod2;
fuck int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
return x*f;
}
fuck void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int n,m,k;
vector<int>h[N],l[N];
int ans1[N],ans2[N],vis1[N],vis2[N];
fuck void solve()
{
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
cin>>n>>m>>k;
for(int i=1;i<=k;i++)
{
int x,y;cin>>x>>y;
h[x].push_back(y);ans1[x]++;
l[y].push_back(x);ans2[y]++;
}
int q=read();
while(q--)
{
int op=read(),c=read();
if(op==1)
{
if(vis1[c]==1){cout<<0<<"\n";continue;}
vis1[c]=1;
cout<<ans1[c]<<"\n";
for(auto v:h[c])ans2[v]--;
}
else
{
if(vis2[c]==1){cout<<0<<"\n";continue;}
vis2[c]=1;
cout<<ans2[c]<<"\n";
for(auto v:l[c])ans1[v]--;
}
}
}
signed main()
{
#ifdef Qiu_Cheng
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
// int fuckccf=read();
// for(int i=1;i<=tot;i++)cout<<prime[i]<<"\n";
// int QwQ=read();
// while(QwQ--)solve();
solve();
return 0;
}
// 6666 66666 666666
// 6 6 6 6 6
// 6 6 6666 6
// 6 6 6 6 6
// 6666 6 6 6666666
完结收工!!!!!

看完点赞,养成习惯
\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

浙公网安备 33010602011771号