D题交互题实在是太蒟蒻了我自己,完全做不动
A. Adjacent Digit Sums
思路:仔细思考一下,其实发现只有两种情况
1.当y=x+1时,那么一定是yes这个不需要过多阐述
2.另外一种情况就是(x-y+1)%9==0,并且x>y的话,也是能够满足的,因为9+1会进位缩短至少8,如果是99则会缩小17,因此如果x>y&&(x-y+1)%9==0那么也是满足的
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[200005];
int x,y;
string s;
void solve()
{
cin>>x>>y;
if((y-x==1)||((x-y+1)%9==0&&x>y))
{
cout<<"YES\n";
}
else
{
cout<<"NO\n";
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
solve();
return 0;
}
B. Two Large Bags
思路:直接用map跑一遍就可以了,我们对于每一个i这样的数字只需要留下两个,然后向上转变成i+1,知道碰到map[i]变为奇数就是"NO",否则就是“YES”
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[200005];
int b[200005];
void solve()
{
cin>>n;
map<int,int> mp;
mp.clear();
for(int i=1;i<=n;i++)
{
cin>>a[i];
mp[a[i]]++;
}
for(int i=1;i<=1000;i++)
{
if(mp[i]>=2)
{
mp[i+1]+=mp[i]-2;
mp[i]=2;
}
if(mp[i]==1)
{
cout<<"NO\n";
return ;
}
}
cout<<"YES\n";
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
solve();
return 0;
}
C. Devyatkino
思路:其实就是一个搜索的问题,我们没一位最多只会加上十次,因此我们之间对每一位进行爆搜即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[200005];
string s;
bool check(int x)
{
while(x>0)
{
if(x%10==7)
return true;
x/=10;
}
return false;
}
void solve()
{
cin>>n;
int flag=n;
int bit=0;
while(flag>0)
{
bit++;
flag/=10;
}
if(check(n))
{
cout<<0<<"\n";
return ;
}
int num=9;
int minn=0x3f3f3f3f;
for(int i=1;i<=bit;i++)
{
flag=n;
for(int j=1;j<=10;j++)
{
flag+=num;
if(check(flag))
{
minn=min(minn,j);
}
}
num=num*10+9;
}
cout<<minn<<"\n";
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
solve();
return 0;
}