| 题目 | 难度 | 知识点 |
|---|---|---|
| A 茂炮牌旭 | ★★ | 模拟冒泡排序 |
| B 补药挂科 | ★ | 模拟 |
| C 圆神启动 | ★ | 推式子 |
| D 学霸题 | ★ | 模拟 |
| E 美人鱼的骰子 | ★ | 贪心 |
| F 跳一跳 | ★★ | 模拟 |
| G 能量饮料 | ★ | 模拟 |
| H 三消bingo | ★ | 模拟 |
| I 你方不方 | ★★ | 博弈论 |
| J 除三操作 | ★★ | 数学 |
挺简单的一套题,但是没能AK,一道是博弈论但是懒得想了,一道是模拟,想的是建图暴力高T了。我觉得是不是打一些这种场挺爽的,但是提升很小罢了。
茂炮牌旭
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n;
string a;
cin>>n>>a;
string b="mnsfdx";
int cnt=0;
for(int i=0;i<b.size();i++)
{
string c=a.substr(i);
int j=c.find(b[i]);
if(j==-1) break;
j=i+j;
for(int l=j;l-1>=i;l--) swap(a[l-1],a[l]),cnt++;
}
if(a==b) cout<<cnt<<endl;
else cout<<"-1"<<'\n';
}
return 0;
}
补药挂科
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
double a[N],b[N],n,m;
int main(void)
{
cin>>n;
double sum=0;
for(int i=0;i<n;i++) cin>>a[i],sum+=a[i];
cin>>m;
for(int i=0;i<m;i++) cin>>b[i],sum+=b[i];
sum=sum/(m+n)*0.3;
double ans=(60-sum)/0.7;
printf("%d",(int)ceil(ans));
return 0;
}
圆神启动
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e3+10;
LL a[N]={0,2,4,8},s[N]={0,2,4,8},n;
int main(void)
{
cin>>n;
cout<<n*(n+1)-2*(n-1);
return 0;
}
学霸题
#include<bits/stdc++.h>
using namespace std;
int a[105][105],n,m;
int main(void)
{
int ans=0;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++) cin>>a[i][j],ans+=a[i][j];
cout<<ans;
return 0;
}
美人鱼的骰子
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int n; cin>>n;
int ans=n/11;
ans=ans*2;
int temp=n%11;
if(temp>=1&&temp<=6) ans++;
if(temp>=7) ans+=2;
cout<<ans;
return 0;
}
跳一跳
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char a[N];
int t,n,m,k;
int main(void)
{
cin>>t;
while(t--)
{
cin>>n>>m>>k;
int cnt=0;
for(int i=1;i<=n;i++) cin>>a[i];
a[n+1]='L',a[0]='L',a[n+2]='L';
int i=0;
while(i<=n+1)
{
if(a[i]=='W'&&a[i+1]=='C') break;
if(a[i]=='W'&&a[i+1]=='L')
{
i++;
continue;
}
if(a[i]=='W'&&a[i+1]=='W'&&!k) break;
if(a[i]=='W'&&a[i+1]=='W'&&k)
{
k--,i++;
continue;
}
int j=i+1;
if(a[j]=='L') i++;
else if(a[j]=='W')
{
int l=i+m;
while(l>i&&a[l]!='L') l--;
if(l>i) i=l;
else
{
l=i+m;
while(l>i&&a[l]!='W') l--;
if(k) k--,i=l;
else break;
}
}else if(a[j]=='C')
{
int l=i+m;
while(l>i&&a[l]!='L') l--;
if(l>i) i=l;
else
{
l=i+m;
while(l>i&&a[l]!='W') l--;
if(l>i&&k) k--,i=l;
else break;
}
}
}
if(i>=n+1) cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
return 0;
}
暴力做法但是只能过80%多
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
char a[N];
int h[N],e[N],ne[N],idx;
int t,n,m,k,flag;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int fa,int w)
{
if(u==n+1) flag=1;
if(flag) return;
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
if(j==fa) continue;
if(a[j]=='W'&&w) dfs(j,u,w-1);
else if(a[j]=='L') dfs(j,u,w);
}
}
int main(void)
{
std::ios::sync_with_stdio(false);
cout.tie(0);
cin.tie(0);
cin>>t;
while(t--)
{
cin>>n>>m>>k;
idx=0;
flag=0;
a[0]='L',a[n+1]='L';
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=0;i<=n+1;i++) h[i]=-1;
for(int i=0;i<=n+1;i++)
for(int j=1;j<=m;j++)
{
if(a[i]=='W'&&j!=1) break;
if(a[i]=='C') continue;
int l=i+j;
if(l>n+1) break;
add(i,l);
}
dfs(0,-1,k);
if(flag) cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
return 0;
}
能量饮料
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,a[N],ans;
int main(void)
{
cin>>n>>m;
int ans=0;
for(int i=1;i<=n;i++) cin>>a[i],ans+=a[i];
int temp=0;
while(m--)
{
int x,v; cin>>x>>v;
temp=max(temp,a[x]-v);
}
cout<<ans-temp;
return 0;
}
三消bingo
#include<bits/stdc++.h>
using namespace std;
string a;
int n;
string solve(string a)
{
string b;
for(int i=0;i<a.size();i++)
{
int j=i;
while(j+1<a.size()&&a[j+1]==a[i]) j++;
if(j-i+1>=3) i=j;
else b+=a[i];
}
return b;
}
int main(void)
{
cin>>n>>a;
for(int i=1;i<=1000;i++)
{
a=solve(a);
}
cout<<a<<endl;
return 0;
}
你方不方
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
puts("YES");
}
return 0;
}
除三操作
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL cnt[50];
int main(void)
{
int t; scanf("%d",&t);
for(int i=0;i<=20;i++) cnt[i]=pow(3,i);
for(int i=0;i<t;i++)
{
int l,r; scanf("%d%d",&l,&r);
long long int ans=0;
for(int i=1;i<=20;i++)
{
LL l1=cnt[i-1],r1=cnt[i]-1;
if(l>=l1&&l<=r1&&r>=r1) ans+=(r1-l+1)*i,l=r1+1;
else if(l>=l1&&r<=r1) ans+=(r-l+1)*i;
}
cout<<ans<<endl;
}
return 0;
}