牛客竞赛语法入门班数组模拟枚举贪心习题未完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客竞赛语法入门班数组模拟枚举贪心习题未完结相关的知识,希望对你有一定的参考价值。

题目地址: https://ac.nowcoder.com/acm/contest/19851?from=acdiscuss

目录

四舍五入


模拟找到第一个进位的,进位后面的都删除。然后再次寻找可以进位的,以此类推,直到进位次数用完,或者结果已经是一个整数。

#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<以上是关于牛客竞赛语法入门班数组模拟枚举贪心习题未完结的主要内容,如果未能解决你的问题,请参考以下文章

牛客竞赛语法入门班循环结构习题完结

牛客竞赛语法入门班顺序结构习题完结

牛客竞赛语法入门班选择结构习题完结

牛客竞赛语法入门班循环结构习题完结

牛客竞赛语法入门班数组栈队列和stl习题未完成

2021算法竞赛入门班第一节课枚举贪心习题