东华oj 80道(1~40题)

本文综合了多个算法题目,包括质因数分解、寻找数组中的第二大元素、骑士斗恶龙策略、构造蛇形矩阵、统计字符串出现次数、将数字转化为特定进制、判断质数的后代、高精度乘法、找寂寞的数、数列生成、孪生素数、区间内最大数查询、数字黑洞、质数乘积、暗恋问题、分糖果、扫雷游戏、S01串构造、身份证排序、回文数构造、班级排名、铺地毯、最小乘积及排队打水问题。涉及算法包括质数判断、排序、搜索、字符串处理、数学计算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 质因数

#include<bits/stdc++.h>
using namespace std;
int n,t;
vector<int> v;
bool is_prime(int x)
{
	for(int i=2;i<=x/i;i++)
		if(x%i==0)
			return false;
	return true;
}

int main()
{
	cin>>n;
	t=n;
	cout<<n<<"=";
	while(n!=1)
	{
		for(int i=2;i<=t;i++)
		{
			if(is_prime(i) && n%i==0)
			{
				v.push_back(i);
				n/=i;
				break;
			}
		}
	}
	for(int i=0;i<v.size();i++)
	{
		if(i) cout<<"*";
		cout<<v[i];
	}
	
	return 0;
}

2.谁是老二?

#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main()
{
	while(cin>>n)
	{
		int a[110];
		priority_queue<int> q;
		set<int> se;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
			if(!se.count(a[i]))
			{
				q.push(a[i]);
				se.insert(a[i]);
			}	
		}
		q.pop();
		if(!q.size()) puts("none");
		else{
			auto t=q.top();
			cout<<t;
			for(int i=0;i<n;i++)
			{
				if(a[i]==t)
				{
					cout<<" "<<i;	
				}
			}
			puts("");			
		}

	}
	
	return 0;
}

3.骑士斗恶龙

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 2e4+10;
int n,m;
int d[N],k[N];
int main()
{
	while(cin>>n>>m)
	{
		for(int i=0;i<n;i++) cin>>d[i];
		for(int i=0;i<m;i++) cin>>k[i];
		if(n>m) puts("Lose!");
		else{
			sort(d,d+n);
			sort(k,k+m);
			int res=0,i=0,j=0;
			for(i=0;i<m;i++)
			{
				if(k[i]>=d[j])
				{
					j++;
					res+=k[i];
				}
				if(j>=n) break;
			}
			if(j<n) puts("Lose!");
			else cout<<res<<endl;
		}
	}
	return 0;
}

4.蛇形方阵

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int a[N][N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			a[i][j]=++m;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(i%2){
			printf("%4d",a[i][1]);
			for(int j=2;j<=n;j++) printf("%4d",a[i][j]);
			puts("");
		}
		else{
			printf("%4d",a[i][n]);
			for(int j=n-1;j>0;j--) printf("%4d",a[i][j]);
			puts("");
		}
	}
	
	return 0;
}

5.单词统计

#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main()
{
	cin>>n;
	getchar();
	while(n--)
	{
		int cnt=0;
		getline(cin,s);
		stringstream ssin(s);
		while(ssin>>s)
		{
			cnt++;
		}
		cout<<cnt<<endl;
	}
	return 0;
}

6.转换成十进制

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int main()
{
	while(cin>>n>>s)
	{
		int t=1,ans=0;
		for(int i=(int)s.size()-1;i>=0;i--)
		{
			if(s[i]>='0' && s[i]<='9') ans+=(s[i]-'0')*t;
			else ans+=(s[i]-'A'+10)*t;
			t*=n;
		}
		cout<<ans<<endl;
	}
	
	return 0;
}

7.十进制转换成其它进制

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int main()
{
	while(cin>>n>>m)
	{
		string ans="";
		while(n)
		{
			int t=n%m;
			if(t>=0 && t<10) ans=char(t+'0')+ans;
			else ans=char('A'+t-10)+ans;
			n/=m;
		}
		cout<<ans<<endl;
	}
	
	return 0;
}

8.最大相同子串

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
string s1,s2,ans;
int main()
{
	while(cin>>s1>>s2)
	{
		ans="";
		int len1=s1.size(),len2=s2.size();
		if(len1>len2)
		{
			swap(s1,s2);
			swap(len1,len2);
		}
		for(int i=0;i<len1;i++)
		{
			for(int j=1;j<=len1-i;j++)	
			{
				string t=s1.substr(i,j);
				int idx=s2.find(t);
				
				if(idx!=-1)
				{
					if((int)ans.size()<1) ans=t;
					else{
						if(t.size()>ans.size())
						{
							ans=t;
						}
						else if(t.size()==ans.size() && t<ans)
						{
							ans=t;
						}
					}	
				}
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

9.冰雹数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,ans;
set<int> se;
int main()
{
	cin>>n;
	if(n==1){
		cout<<1;
		return 0;
	}
	for(int i=2;i<=n;i++)
	{
		ans=max(ans,i);
		if(!se.count(i)) se.insert(i);
		else continue;
		int j=i;
		while(j!=1)
		{
			if(j%2) j=j*3+1;
			else j/=2;
			ans=max(ans,j);
			if(!se.count(j)) se.insert(j);
			else break;			
		}
	}
	cout<<ans;
	return 0;
}

10.小数第n位

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
typedef long long LL;
int n,ans;
int main()
{
	LL a,b;
	cin>>a>>b>>n;
	while(n-10>0)
	{
		a*=1e10;
		a%=b;
		n-=10;
	}
	for(int i=0;i<n+2;i++)
	{
		a*=10;
		if(i>=n-1) 
			printf("%lld",a/b);
		a%=b;
	}
	return 0;
}

11.丑数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
LL n,ans,top,k,x,a[N];
set<LL> se;
int main()
{
	cin>>n>>k;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		se.insert(a[i]);
	}
	while(k--)
	{
		top=*se.begin();
		se.erase(se.begin());
		for(int i=0;i<n;i++)
			se.insert(top*a[i]);
	}
	cout<<top;
	return 0;
}

12.笨小猴

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,maxt=-N,mint=N;
map<char,int> mp;
string s;
bool is_prime(int x)
{
	for(int i=2;i<=x/i;i++)
		if(x%i==0)
			return false;
	return true;
}
int main()
{
	getline(cin,s);
	for(int i=0;i<s.size();i++)
	{
		if(s[i]>='a' && s[i]<='z')
			mp[s[i]]++;
	}
	for(int i='a';i<='z';i++)
	{
		if(mp[i])
		{
			maxt=max(maxt,mp[i]);
			mint=min(mint,mp[i]);			
		}
	}
	maxt-=mint;
	if(maxt<2){
		cout<<"No Answer"<<endl;
		cout<<0<<endl;
	}
	else{
		if(is_prime(maxt)){
			cout<<"Lucky Word"<<endl;	
			cout<<maxt<<endl;
		}
		else{
			cout<<"No Answer"<<endl;
			cout<<0<<endl;
		}
	}
	return 0;
}

13.字串统计

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,maxt;
string s,ans;
int main()
{
	cin>>n;
	cin>>s;
	for(int i=n;i<s.size();i++)
	{
		for(int j=0;j<s.size()-i;j++)
		{
			string s1=s.substr(j,i);
			int cnt=0;
			for(int k=j+1;k<s.size()-i;k++)
			{
				string s2=s.substr(k,i);
				if(s1==s2) cnt++;
			}
			
			if((cnt>maxt) || s1.size()>ans.size() && cnt==maxt)
			{
				maxt=cnt;
				ans=s1;
			}
		}
	}
	cout<<ans;
	return 0;
}

14.Anagrams问题

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,a1[30],a2[30];
string s,s1,s2;
int main()
{
	cin>>s1>>s2;
	for(int i=0;i<s1.size();i++)
	{
		if(s1[i]>='a' && s1[i]<='z') a1[s1[i]-'a']++;
		if(s1[i]>='A' && s1[i]<='Z') a1[s1[i]-'A']++;
	}
	for(int i=0;i<s2.size();i++)
	{
		if(s2[i]>='a' && s2[i]<='z') a2[s2[i]-'a']++;
		if(s2[i]>='A' && s2[i]<='Z') a2[s2[i]-'A']++;
	}	
	for(int i=0;i<30;i++)
	{
		if(a1[i]!=a2[i])
		{
			cout<<"N";
			return 0;
		}
	}
	cout<<"Y";
	return 0;
}

15.身份证号码升级

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,sf,a[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
string s;
char c[11]={'1','0','x','9','8','7','6','5','4','3','2'};
int main()
{
	cin>>s;
	string t=s.substr(0,6);
	t+="19";
	t+=s.substr(6);
	s=t;
	for(int i=0;i<17;i++)
		sf+=((s[i]-'0')*a[i]);
	sf%=11;
	s+=c[sf];
	cout<<s;
	return 0;
}

16.彩票

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,sf,jiang[10];
set<int> se;
int main()
{
	cin>>n;
	for(int i=0;i<7;i++)
	{
		cin>>sf;
		se.insert(sf);
	}
	while(n--)
	{
		int cnt=0;
		for(int i=0;i<7;i++)
		{
			cin>>sf;
			if(se.count(sf)) cnt++;
		}
		jiang[7-cnt]++;
	}
	for(int i=0;i<7;i++) cout<<jiang[i]<<" ";
	return 0;
}

17.质数的后代

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,primes[N],co;
bool st[N];
set<int> se;
int main()
{
	for(int i=2;i<=N;i++)
	{
		if(!st[i]){
			primes[co++]=i; 
			se.insert(i);
		}
		for(int j=0;primes[j]<=N/i;j++)
		{
			st[i*primes[j]]=1;
			if(i%primes[j]==0) break;
		}
	}
	cin>>n;
	int x;
	for(int i=0;i<n;i++)
	{
		int f=0;
		cin>>x;
		for(int i=0;i<co;i++)
		{
			if(x%primes[i]==0 && se.count(x/primes[i]))
			{
				f=1;
				break;
			}
		}
		if(f) puts("Yes");
		else puts("No");
	}

	return 0;
}

18.高精度乘法

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e5+10;
int a[M],b[M],l1,l2;
char s[N];
void print(int a[])
{
    int k=M-1;
    while(k && !a[k]) k--;
    for(int i=k;i>=0;i--) cout<<a[i];
}
void mul(int a[],int b[])
{
    int t=0,temp[M];
    memset(temp,0,sizeof temp);
    for(int i=0;i<l1;i++)
        for(int j=0;j<l2;j++)
            temp[i+j]+=a[i]*b[j];
            
    for(int i=0;i<l1+l2;i++)
    {
        t+=temp[i];
        temp[i]=t%10;
        t/=10;
    }
    
    memcpy(a,temp,sizeof temp);
}
int main()
{
    scanf("%s",s);
    l1=strlen(s);
    for(int i=0;i<l1;i++) a[l1-i-1]=s[i]-'0';
    
    scanf("%s",s);
    l2=strlen(s);
    for(int i=0;i<l2;i++) b[l2-i-1]=s[i]-'0';
    
    mul(a,b);
    print(a);
    return 0;
}

19.阶乘末尾

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10,M= 2e5+10;
int a[N],n,len;
void mul(int a[],int x)
{
	int c[N],temp=0;
	memset(c,0,sizeof c);
	for(int i=0;i<N;i++)
	{
		temp+=x*a[i];
		c[i]=temp%10;
		temp/=10;
	}
	memcpy(a,c,sizeof c);
}
int main()
{
	a[0]=1;
    scanf("%d%d",&n,&len);
	for(int i=2;i<=n;i++)
	{
		mul(a,i);
	}
	string res="";
	for(int i=0;i<len;i++) res=char(a[i]+'0')+res;
	cout<<res;
    return 0;
}

20.寂寞的数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10,M= 2e5+10;
bool st[N];
int n;
void d(int u)
{
	if(u>N) return ;
	int res=u;
	while(u)
	{
		int t=u%10;
		res+=t;
		u/=10;
	}
	st[res]=1;
	d(res);
}
int main()
{
	for(int i=1;i<=N;i++)
	{
		if(!st[i])
		{
			d(i);
		}
	}
	cin>>n;
    for(int i=1;i<=n;i++)
    {
    	if(!st[i])
    		cout<<i<<endl;
	}
	return 0;
}

21.数列

#include<bits/stdc++.h>
using namespace std;
const int N = 2e3+10,M= 2e9;
bool st[N];
int f,k,n,a[N],ans;
set<int> se;
void dfs(int u)
{
	if(f==2) return ;
	if(u==10){
		if(!f){
			f=1;
			return ;
		}
		else if(f==1){
			int t=1,res=0;
			for(int i=9;i>=0;i--)
			{
				if(st[i]) res+=t;
				t*=k;
			}
			if(!se.count(res)){
				se.insert(res);	
				if(se.size()==n){
					cout<<res;
					f=2;
				}
			}
			
			return ;			
		}

	}
	dfs(u+1);
	st[u]=1;
	dfs(u+1);
	st[u]=0;
}
int main()
{
	cin>>k>>n;
	dfs(0);
	
	return 0;
}

22.孪生素数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
bool st[N];
int k,n,x,ans,primes[N],cnt,p[N];
set<int> se;
int main()
{
	for(int i=2;i<=N;i++)
	{
		if(!st[i]) primes[cnt++]=i;
		for(int j=0;primes[j]<=N/i;j++)
		{
			st[primes[j]*i]=1;
			if(i%primes[j]==0) break;
		}
	}
	for(int i=1;i<cnt;i++)
	{
		if(primes[i]==primes[i-1]+2)
		{
			p[k++]=primes[i];
		}
	}
	while(cin>>n)
	{
		if(n<0) break;
		int co=0;
		for(co=0;co<k;co++)
		{
			if(p[co]>n) break;
		}
		cout<<co<<endl;
	}

	return 0;
}

23.区间k大数查询

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
bool st[N];
int k,n,m,x,ans,a[N],cnt,p[N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	cin>>m;
	int l,r;
	while(m--)
	{
		cin>>l>>r>>k;
		vector<int> v; 
		for(int i=l;i<=r;i++)
		{
			v.push_back(a[i]);
		}
		sort(v.begin(),v.end(),greater<int>());
		cout<<v[k-1]<<endl;
	}

	return 0;
}

24.数的统计

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
int k,n,m,x,ans,a[N];
map<int,int> mp;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		mp[x]++;
	}
	for(auto x:mp)
		cout<<x.first<<" "<<x.second<<endl;
	return 0;
}

25.数字黑洞

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
int k,n,m,x,co,ans,a[N];
map<int,int> mp;
string s;
int main()
{
	cin>>s;
	while(s!="6174")
	{
		sort(s.begin(),s.end());
		int t1=0,t2=0,k1=1000,k2=1;
		for(int i=s.size()-1;i>=0;i--)
		{
			t1+=(s[i]-'0')*k1;
			t2+=(s[i]-'0')*k2;
			k1/=10;
			k2*=10;
		}
		t1-=t2;
		s=to_string(t1);
		while(s.size()<4) s+='0';
		co++;
	}
	cout<<co;
	return 0;
}

26.质数的乘积

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10,MOD=5e4;
int k=2,n,m,x,co,a[N];
LL ans=1;
int main()
{
	cin>>n;
	if(n==0) cout<<0;
	else if(n==1) cout<<2;
	else if(n==2) cout<<6;
	else{
		ans=6;
		for(int times=3,i=5;times<=n;i++)
		{
			int f=0;
			for(int j=2;j<=sqrt(i);j++)
			{
				if(i%j==0 && i!=j)
				{
					f=1;
					break;
				}
			}	
			if(!f){
				ans=(ans*i)%MOD;
				times++;
			}
		}	
		cout<<ans%MOD;
	}
	return 0;
}

27.暗恋

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 210,MOD=5e4;
int n,m,x,co,g[N][N],ans;
bool check(int x,int y,int len)
{
	int color=g[x][y];
	for(int i=0;i<len;i++)
		for(int j=0;j<len;j++)
			if(g[x+i][y+j]!=color)
				return false;
	return true;
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			cin>>g[i][j];
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			for(int len=ans+1;len<max(n,m);len++)
			{
				if(i+len<=n && j+len<=m)
				{
					if(check(i,j,len)) ans=len;
				}
				else break;
			}
		}
	}
	cout<<ans*ans;
	return 0;
}

28.约瑟夫环

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,k;
bool st[N];
int main()
{
	while(cin>>n>>k)
	{
		vector<int> v;
		memset(st,0,sizeof st);
		int cur=0,cnt=1,tot=0;
		while(tot!=n)
		{
			if(st[cur])
			{
				cur=(cur+1)%n;
				continue;	
			}
			
			if(cnt%k==0)
			{
				st[cur]=1;
				v.push_back(cur+1);				
				tot++;
			}
			cur=(cur+1)%n;
			cnt++;
		}
		for(int i=0;i<v.size()-1;i++) cout<<v[i]<<" ";
		cout<<v[v.size()-1]<<endl;
	}
	return 0;
}

29.连续正整数的和

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10,MOD=5e4;
int n,r;
bool st[N];
void dfs(int u,int tot)
{
	if(tot>n) return ;
	if(tot==n)
	{
		r=u-1;
		return ;	
	}
	dfs(u+1,tot+u);
}
int main()
{
	cin>>n;
	for(int i=1;i<=n/2;i++)
	{
		r=-1;
		dfs(i,0);
		if(r!=-1)
		{
			cout<<i<<" "<<r<<endl;
		}
	}
	return 0;
}

30.翻硬币

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,k,co;
string s1,s2;
int main()
{
	cin>>s1>>s2;
	for(int i=0;i<s1.size()-1;i++)
	{
		if(s1[i]!=s2[i])
		{
			if(s1[i]=='*') s1[i]='o';
			else s1[i]='*';
			if(s1[i+1]=='o') s1[i+1]='*';
			else s1[i+1]='o';
			co++;
		}
	}
	cout<<co;
	return 0;
}

31.分糖果

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,a[N],b[N],cnt=0;
string s1,s2;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	while(1)
	{
		memset(b,0,sizeof b);
		for(int i=0;i<n-1;i++)
			b[i]=a[i+1]/2;
		b[n-1]=a[0]/2; 
		for(int i=0;i<n;i++)
		{
			a[i]/=2;
			a[i]+=b[i];
			if(a[i]%2){
				a[i]++;
				cnt++;
			}
		}
		set<int> se;
		int f=0;
		for(int i=0;i<n;i++)
		{
			se.insert(a[i]);
			if(se.size()>1)
			{
				f=1;
				break;
			}
		}
		if(!f){
			cout<<cnt;
			break;
		}
	}
	return 0;
}

32.扫雷

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,m,a[N][N],cnt=1;
char g[N][N];
int dx[8]={1,0,-1,0,-1,-1,1,1},dy[8]={0,1,0,-1,-1,1,-1,1};
int main()
{
	while(cin>>n>>m)
	{
		if(!n && !m) break;
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				cin>>g[i][j];		
		
		memset(a,-1,sizeof a);
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
			{
				if(g[i][j]!='*')
				{
					int cnt=0;
					for(int k=0;k<8;k++)
					{
						int x=i+dx[k],y=j+dy[k];
						if(x>=0 && x<n && y>=0 && y<m && g[x][y]=='*') cnt++;
					}
					a[i][j]=cnt;					
				}
			}
		cout<<"Field #"<<cnt<<":"<<endl;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(a[i][j]==-1) cout<<'*';
				else cout<<a[i][j];
			}
			cout<<endl;
		}
		cout<<endl;
		cnt++;
	}
	
	return 0;
}

33.S01串

#include<bits/stdc++.h>
using namespace std;
string s="0";
int n;
int main()
{
	cin>>n;
	while(n--)
	{
		string t="";
		for(int i=0;i<s.size();i++)
		{
			if(s[i]=='0') t+='1';
			else t+="01";
		}
		s=t;
	}
	cout<<s;
	return 0;
}

34.身份证排序

#include<bits/stdc++.h>
using namespace std;
int n;
string str;
struct node{
	string s,dt;
	
	bool operator<(const node &p) const{
		if(dt!=p.dt) return dt>p.dt;
		return s>p.s;
	}
};
int main()
{
	vector<node> v;
	cin>>n;
	while(n--)
	{
		cin>>str;
		v.push_back({str,str.substr(6,8)});
	}
	sort(v.begin(),v.end());
	for(auto x:v) cout<<x.s<<endl; 
	return 0;
}

35.回文数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,m,cnt=1;
char a[N];
string s;
void add(char a[],char b[])
{
	char c[N];
	for(int i=0;i<N;i++) c[i]='0';
	int t=0;
	for(int i=0;i<N;i++)
	{
		int c1,c2;
		if(a[i]>='0' && a[i]<='9') c1=a[i]-'0';
		else c1=a[i]-'A'+10;
		if(b[i]>='0' && b[i]<='9') c2=b[i]-'0';
		else c2=b[i]-'A'+10;
		t=c1+c2+t;
		int cc=t%m;
		if(cc<10) c[i]=char(cc+'0');
		else c[i]=char(cc-10+'A');
		t/=m;		
	}
	memcpy(a,c,sizeof c);
}
int main()
{
	for(int i=0;i<N;i++) a[i]='0';
	cin>>m>>s;
	if(s==string(s.rbegin(),s.rend()))
	{
		cout<<"STEP="<<0;
		return 0;
	}
	for(int i=(int)s.size()-1;i>=0;i--)
		a[n++]=s[i];
	while(cnt<=30)
	{
		char b[N];
		for(int i=0;i<N;i++) b[i]='0';
		string t=string(s.rbegin(),s.rend());
		int idx=0;
		for(int i=(int)t.size()-1;i>=0;i--)
			b[idx++]=t[i];
		add(a,b);
		idx=N-1;
		while(a[idx]=='0') idx--;
		string ss="";
		for(int i=idx;i>=0;i--) ss+=a[i];
		if(ss==string(ss.rbegin(),ss.rend())){
			cout<<"STEP="<<cnt;
			break;	
		}
		s=ss;
		cnt++;
	}
	if(cnt>=30) puts("Impossible!");
	return 0;
}

36.新生舞会

#include<bits/stdc++.h>
using namespace std;
int n,m;
string s1,s2,s3;
map<string,string> mp1,mp2;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s1>>s2>>s3;
		mp1[s1]=s3,mp2[s2]=s3;
	}
	cin>>m;
	while(m--)
	{
		cin>>s1>>s2;
		int f=0;
		string sex1,sex2;
		if(mp1[s1].size()) sex1=mp1[s1];
		else sex1=mp2[s1];
		if(mp1[s2].size()) sex2=mp1[s2];
		else sex2=mp2[s2];
		if(sex1!=sex2) puts("Y");
		else puts("N");
	}
	return 0;
}

37.班级排名

#include<bits/stdc++.h>
using namespace std;
int n,m,sc,a[110];
string s1;
map<string,int> mp;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s1;
		mp[s1]=i;
	}
	cin>>m;
	while(m--)
	{
		int t=0;
		vector<int> v;		
		for(int i=0;i<n;i++)
		{
			cin>>sc>>s1;
			a[mp[s1]]+=sc;
			v.push_back(a[mp[s1]]);
			if(s1=="DaDa") t=a[mp[s1]];
		}
		sort(v.begin(),v.end(),greater<int>());
		for(int i=0;i<v.size();i++)
		{
			if(t==v[i])
			{
				cout<<i+1<<endl;
				break;
			}
		}
	}
	return 0;
}

38.铺地毯

#include<bits/stdc++.h>
using namespace std;
int n,m,f,a,b,c,d;
struct node{
	int x_1,y_1,x_2,y_2;
};
int main()
{
	vector<node> v;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a>>b>>c>>d;
		v.push_back({a,b,a+c,b+d});
	}
	cin>>a>>b;
	for(int i=n-1;i>=0;i--)
	{
		if(v[i].x_1<=a && a<=v[i].x_2 && v[i].y_1<=b && b<=v[i].y_2)
		{
			f=1;
			cout<<i+1;
			break;
		}
	}
	if(!f) cout<<-1;
	return 0;
}

39.最小乘积

#include<bits/stdc++.h>
using namespace std;
int n,m,r,ans,a[10],b[10],T;
int main()
{
	cin>>T;
	while(T--)
	{
		ans=0;
		cin>>n;
		for(int i=0;i<n;i++) cin>>a[i];
		for(int i=0;i<n;i++) cin>>b[i];
		sort(a,a+n);
		sort(b,b+n,greater<int>());
		for(int i=0;i<n;i++)
			ans+=a[i]*b[i];
		
		cout<<ans<<endl;
	}
	return 0;
}

40. 排队打水问题

#include<bits/stdc++.h>
using namespace std;
int n,m,r,ans,a[510];
priority_queue<int,vector<int>,greater<int> > q;
int main()
{
	cin>>n>>r;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		ans+=a[i];
	}
	sort(a,a+n);
	for(int i=0;i<r;i++) q.push(a[i]);
	for(int i=r;i<n;i++)
	{
		auto t=q.top(); q.pop();
		ans+=t;
		t+=a[i];
		q.push(t);
	}
	cout<<ans;
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_fearless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值