部分,今天整不完了
A.带分数(补题)##
这...
话说赛时难以置信地看了好几遍题目,然后完全没思路
(我以为有什么神仙结论,压根没想暴力搜索,还是被虎到了,
然后就根本没管这道题了,不然还能骗点分
额,这代码吧,
像这种数字搜索,掌握得不太好,想起之前全排列挺折磨的(
翻题解翻到全排列函数
next_permutation()
挺好
然后看题解代码看蛮久,事实证明还是要自己想,不然看得太痛苦了
最外层while循环就是1-9的全排列,
然后里面for循环把这些数字分配给整数部分和分数部分
真的非常暴力)
`#include <bits/stdc++.h>
using namespace std;
define ll long long
define endl '\n'
int a[10];
int work(int l,int r)
{
int sum=0;
for(int i=l;i<=r;i++){
sum=sum*10+a[i];
}
return sum;
}//验证
int t,n;
int main()
{
for(int i=0;i<10;i++) a[i]=i+1;
cin>>n;
int ans=0;
do{
for(int i=0;i<7;i++){
int x=work(0,i);
if(x>n) break;
for(int j=i+1;j<8;j++){
int y=work(i+1,j),z=work(j+1,8);
if(y%z0&&x+y/zn){
ans++;
}
}
}
}while(next_permutation(a,a+9));
cout<<ans;
return 0;
}`
B.错误票据(补题)##
这题真的要炸
赛时开了一个数组,类似桶的方式储存每个数字出现的个数,
记录下最大最小值,然后跑一遍
T了,去看题解,同样都是跑一遍嘛,为啥我T
发现自己没排序(
就是有可能最小的数出现在最后,那我就出不了循环了)
然后去排序发现我也不知道这么长一数组要从哪儿排,救命
然后硬排,完美T了
好,换个方式
用推vector来排序吧
不知怎的来个MLE(它一定在逗我
行,找AC小伙伴,不信过不了
上代码
``#include <bits/stdc++.h>
using namespace std;
define endl '\n'
define ll long long
int n,a[100009],x,res,ans;
int main()
{
cin>>n;
vector
while(cin>>x){
v.push_back(x);
a[x]++;
}
for(int i=1;i<=100000;++i){
if(a[i]==0&&a[i+1]>0&&a[i-1]>0) res=i;
if(a[i]>1) ans=i;
}
cout<<res<<' '<<ans;
return 0;
}``
C.翻硬币##
初始状态和目标状态相比较,跑一遍就好
因为相邻两个都要改变
所以当对应不同时,当前位置翻肯定相同了
然后把后一个位置换成另一个状态,计数+1
因为题目保证有解,
所以我们只需继续这样判就好了
`#include <bits/stdc++.h>
using namespace std;
define ll long long
define endl '\n'
int main()
{
string o,s;
cin>>o>>s;
ll cnt=0;
for(ll i=0;i<o.size()-1;i++){
if(o[i]!=s[i]) {
cnt++;
if(s[i+1]'o') s[i+1]='*';
else if(s[i+1]'*') s[i+1]='o';
}
}
cout<<cnt;
return 0;
}`
特别数的和##
看似很虎,其实很水
它已经给定4个数字了嘛
我们从1到n遍历一遍,把每个数字每个数位都提出来(满足一个计数器+1就可以break了
有四个数中的一个就行
`#include <bits/stdc++.h>
using namespace std;
define ll long long
define endl '\n'
int main()
{
ll n;
cin>>n;
ll sum=0;
for(ll i=1;i<=n;i++){
ll tem=i;
while(tem){
ll te=tem%10;
if(te2||te0||te1||te9) {
sum+=i;
break;
}
tem/=10;
}
}
cout<<sum;
return 0;
}
结束,润去睡
明天还有~