牛客竞赛语法入门班数组模拟枚举贪心习题未完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客竞赛语法入门班数组模拟枚举贪心习题未完结相关的知识,希望对你有一定的参考价值。
题目地址: https://ac.nowcoder.com/acm/contest/19851?from=acdiscuss
目录
- 四舍五入
- 安卓图案解锁
- Captcha Cracker
- 回文数
- [NOIP2016]玩具谜题
- [NOIP2015]神奇的幻方
- Tic-Tac-Toe
- I love you【经典求子序列的次数】
- [NOIP2007]Hanoi双塔问题
- 方块与收纳盒
- 答题卡
- 区间求和
- 零钱兑换
- 斐波那契
- 生日宴
- 了断局
- 脸盆大哥的木桶
- 倒水
- Cut
- 强迫症的序列
- 字典序最大的子序列
- 强迫症
- [NOIP2007]纪念品分组
- Eustia of the Tarnished Wings
- Shopping
- Mountain
- 可持久化动态图上树状数组维护01背包
- 纸牌游戏
- 组队
- 牛牛玩平板
- [NOIP2008]排座椅
四舍五入
模拟找到第一个进位的,进位后面的都删除。然后再次寻找可以进位的,以此类推,直到进位次数用完,或者结果已经是一个整数。
#include<bits/stdc++.h>
using namespace std;
string s;
int flag;
void solve()
vector<int>A,C;
for(int i=s.find('.')+1;i<s.size();i++)
if( (s[i]-'0')>=5)
flag=1;
break;
A.push_back(s[i]-'0');
if(flag)
int temp=1;
for(int i=A.size()-1;i>=0;i--)
temp+=A[i];
C.push_back(temp%10);
temp=temp/10;
string ss;
for(int i=0;i<s.size();i++)
if(s[i]=='.') break;
ss+=s[i];
if(temp)
ss.clear();
int temp=1;
for(int i=s.find('.')-1;i>=0;i--)
temp+=s[i]-'0';
ss+=to_string(temp%10);
temp/=10;
if(temp) ss+="1";
reverse(ss.begin(),ss.end());
s=ss;
else
ss+='.';
for(int i=C.size()-1;i>=0;i--) ss+=to_string(C[i]);
s=ss;
int main(void)
int n,t; cin>>n>>t;
cin>>s;
while(t--)
flag=0;
if(s.find('.')==-1) break;
solve();
if(!flag) break;
cout<<s<<endl;
return 0;
安卓图案解锁
只要看横,竖,对角线即可。因为其他的都可以直接到达。只有三点一线这种情况需要特殊判断。
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+10;
int a[N][N],flag,st[N];
string s;
int check(int s1,int s2)
if( (s1==1&&s2==3&&!st[2]) || (s1==3&&s2==1&&!st[2]) ) return 0;
if( (s1==4&&s2==6&&!st[5]) || (s1==6&&s2==4&&!st[5]) ) return 0;
if( (s1==7&&s2==9&&!st[8]) || (s1==9&&s2==7&&!st[8]) ) return 0;
if( (s1==1&&s2==7&&!st[4]) || (s1==7&&s2==1&&!st[4]) ) return 0;
if( (s1==2&&s2==8&&!st[5]) || (s1==8&&s2==2&&!st[5]) ) return 0;
if( (s1==3&&s2==9&&!st[6]) || (s1==9&&s2==3&&!st[6]) ) return 0;
if( (s1==1&&s2==9&&!st[5]) || (s1==9&&s2==1&&!st[5]) ) return 0;
if( (s1==3&&s2==7&&!st[5]) || (s1==7&&s2==3&&!st[5]) ) return 0;
if(st[s2]) return 0;
return 1;
int main(void)
while(cin>>s)
flag=1;
memset(st,0,sizeof st);
for(int i=0;i+1<s.size();i++)
st[s[i]-'0']++;
if( !check(s[i]-'0',s[i+1]-'0') )
flag=0;
if(flag) puts("YES");
else puts("NO");
return 0;
Captcha Cracker
#include<bits/stdc++.h>
using namespace std;
int main(void)
int t; cin>>t;
while(t--)
string s,ans,temp; cin>>s;
for(int i=0;i<s.size();i++)
temp+=s[i];
if(temp.find("zero")!=-1) ans+="0",temp.clear();
if(temp.find("two")!=-1) ans+="2",temp.clear();
if(temp.find("four")!=-1) ans+="4",temp.clear();
if(temp.find("six")!=-1) ans+="6",temp.clear();
if(temp.find("nine")!=-1) ans+="9",temp.clear();
if(s[i]=='0'||s[i]=='2'||s[i]=='4'||s[i]=='6'||s[i]=='9') ans+=s[i];
cout<<ans<<endl;
return 0;
回文数
#include<bits/stdc++.h>
using namespace std;
int a[105];
void solve()
int cnt1=0,cnt2=0,sum=0;
for(int i=0;i<=9;i++)
if(a[i]%2) cnt1++;
if(a[i]%2==0&&a[i]) cnt2++;
sum+=a[i];
if(cnt1>1||sum-a[0]==1) cout<<"-1"<<endl;
else
string s;
for(int i=1;i<=9;i++)
if(a[i]>=2)
s+=to_string(i),a[i]-=2;
break;
for(int i=0;i<=9;i++)
while(a[i]>=2) s+=to_string(i),a[i]-=2;
if(cnt1)
for(int i=0;i<=9;i++)
if(a[i]) s+=to_string(i);
string ss=s;
ss.erase(ss.size()-1); reverse(ss.begin(),ss.end());
s+=ss;
cout<<s<<endl;
else
string ss=s; reverse(ss.begin(),ss.end());
s+=ss;
cout<<s;
int main(void)
for(int i=0;i<=9;i++) cin>>a[i];
solve();
return 0;
[NOIP2016]玩具谜题
#include<cstdio>
#include<iostream>
using namespace std;
struct student
string name;
int d;
stu[100005];
int main(void)
int n,m;cin>>n>>m;
for(int i=0;i<n;i++) cin>>stu[i].d>>stu[i].name;
int ans=0;
while(m--)
int a,s; cin>>a>>s;//0左 1右
//外
if(stu[ans].d)
if(a) ans=(n+ans-s)%n;//右
else ans=(ans+s)%n;//左
//内
else
if(a) ans=(ans+s)%n;//右
else ans=(n+ans-s)%n;//左
cout<<stu[ans].name<<endl;
return 0;
[NOIP2015]神奇的幻方
模拟即可。
#include<bits/stdc++.h>
using namespace std;
int a[55][55];
int main(void)
int n; cin>>n;
a[1][n/2+1]=1;
int k=2,x=1,y=n/2+1;
while(k<=n*n)
if(x==1&&y!=n)
a[n][y+1]=k;
x=n,y=y+1;
else if(x!=1&&y==n)
a[x-1][1]=k;
x=x-1,y=1;
else if(x==1&&y==n)
a[x+1][y]=k;
x=x+1,y=y;
else
int xx=x-1,yy=y+1;
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&!a[xx][yy]) a[xx][yy]=k,x=xx,y=yy;
else
a[x+1][y]=k;
x=x+1,y=y;
k++;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cout<<a[i][j]<<" ";
cout<<endl;
return 0;
Tic-Tac-Toe
#include<bits/stdc++.h>
using namespace std;
string s[15];
int solve(char c)
string ss;
for(int i=0;i<以上是关于牛客竞赛语法入门班数组模拟枚举贪心习题未完结的主要内容,如果未能解决你的问题,请参考以下文章