https://atcoder.jp/contests/abc212/tasks/abc212_a
水呀水
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
int main()
{
ios
int a,b;
cin>>a>>b;
if(a==0)cout<<"Silver"<<endl;
else if(b==0)cout<<"Gold"<<endl;
else cout<<"Alloy"<<endl;
return 0;
}
https://atcoder.jp/contests/abc212/tasks/abc212_b
简单的模拟题
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
char num[6];
void solve()
{
cin>>num;
int flg1=0,flg2=0;
for(int i=1;i<=3;i++)
{
if(num[i]!=num[i-1])
{
flg1=1;
}
if(num[i]!=num[i-1]+1&&!(num[i]=='0'&&num[i-1]=='9'))
{
flg2=1;
}
}
//cout<<flg1<<' '<<flg2<<endl;
if(flg1&&flg2)cout<<"Strong"<<endl;
else cout<<"Weak"<<endl;
}
int main()
{
ios
solve();
return 0;
}
https://atcoder.jp/contests/abc212/tasks/abc212_c
给你两个数组,让你找两个数组中最接近的数。
二分板子题吧
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
const int maxn=2e5+5;
int n,m,a[maxn],b[maxn];
int main()
{
ios
cin>>n>>m;
rep(i,1,n)cin>>a[i];
rep(i,1,m)cin>>b[i];
sort(b+1,b+m+1);
int minn=1e9+5;
for(int i=1;i<=n;i++)
{
int l=1,r=m,ans=0;
while(l<=r)
{
int mid=(l+r)>>1;
if(a[i]>b[mid])
{
ans=mid;
l=mid+1;
}
else r=mid-1;
}
if(ans!=m)minn=min(minn,(b[ans+1]-a[i]));
//cout<<minn<<endl;
if(ans!=0)minn=min(minn,(a[i]-b[ans]));
//cout<<minn<<endl;
}
cout<<minn<<endl;
return 0;
}
https://atcoder.jp/contests/abc212/tasks/abc212_d
有三种操作
1.增加一个数n
2.已有的数全部增加sum
3.输出最小的数并删除它
首先要输出最小的数,而且这个数列中的数还是不断增多的,想到优先队列,然后有一个把已有的数全都增加n的操作,我第一反应是差分,原理就是给一段数a到b +n,可以把a+n,把b后面的数-n再取前缀和。
在这题,可以看作是每个数都加了所有的sum,再减去没有加到的sum,那我们可以维护这个sum的值,然后每个数在进队的时候减去这个sum,再在出队的时候加回来,就可以得到答案了。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
ll n,flg,a,sum;
priority_queue<ll,vector<ll>,greater<ll> >q;
int main()
{
ios
cin>>n;
sum=0;
while(!q.empty())q.pop();
while(n--)
{
cin>>flg;
if(flg==1)
{
cin>>a;
q.push(a-sum);
}
else if(flg==2)
{
cin>>a;
sum+=a;
}
else if(flg==3)
{
cout<<q.top()+sum<<endl;
q.pop();
}
}
return 0;
}