2021.3.13号组队赛补题

c题:
当时考虑复杂了,直接遍历即可。
#include<bits/stdc++.h>
#include
#define ll long long
using namespace std;
ll a[6]={0};
int main(){
ll t;
cin>>t;
while(t–){
ll n,nl,nll;
cin>>n;
nl=n;
nll=n;
ll i,j;
cout<<"Input cost: "<<n<<endl;
double m;
ll ml;
m=n1.00.2;
ml=n/5;
if(m>ml){
ml+=1;
}
n+=ml;
ll f=0,k=0;
nl=n;
while(1){
k=0;

	 	while(1){
	 		a[k]=nl%10;
	 		k++;
	 		nl/=10;
	 		if(nl==0){
	 			break;
			}
		}
		for(i=0;i<k/2;i++){
		if(a[i]!=a[k-1-i]){
			f=1;
			break;
		}
		}
		
		 if(f==0){
		 	break;
		 }else{
		 	n++;
	 	    nl=n;
		 	f=0;
		 }
	 }
	 cout<<n-nll<<" "<<n<<endl<<endl;
 }

}
****d题:
此题不是我过的,属于我的短板。看到题目篇幅很长,涉及条件很多,就感觉无从下手,这类题目运用结构体比较合适。结合结构体与sort函数,sort函数用处很多。这个题涉及到自己很多薄弱点,重点补。
#include<bits/stdc++.h>
#include
#define ll long long
using namespace std;
struct team
{
string name;
int point;
int win;
int losse;
int draws;
int win1;
int losse1;
int num;
};
***bool comp(team t1,team t2)//结构体与Sort函数混用。
{
if(t1.point!=t2.point)
{
return t1.point>t2.point;
}
if(t1.num!=t2.num)
{
return t1.num>t2.num;
}

        if(t1.win1!=t2.win1)
        {
            return t1.win1>t2.win1;
        }
                return t1.name<t2.name;

}***
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int m1,m2;
cin>>m1>>m2;
//初始化
team tt[m1];
for(int j=0;j<m1;j++)
{
tt[j].point=0;
tt[j].win=0;
tt[j].losse=0;
tt[j].draws=0;
tt[j].win1=0;
tt[j].losse1=0;
tt[j].num=0;
}
for(int j=0;j<m1;j++)
{
cin>>tt[j].name;
}
for(int j=0;j<m2;j++)
{
string t1,t2;
int n1,n2;
cin>>t1>>n1;
cin>>t2>>n2;
int mm1,mm2;
if(n1>n2)//1胜
{
mm1=1;
mm2=0;
}
if(n1<n2)//2胜
{
mm1=0;
mm2=1;
}
if(n1n2)//平局
{
mm1=2;
mm2=2;
}
for(int d=0;d<m1;d++)
{
if(t1
tt[d].name)
{
tt[d].win1+=n1;
tt[d].losse1+=n2;
if(mm11)
{
tt[d].win++;
tt[d].point+=3;
}
if(mm1
2)
{
tt[d].draws++;
tt[d].point+=1;
}
if(mm10)tt[d].losse++;
}
if(t2
tt[d].name)
{
tt[d].win1+=n2;
tt[d].losse1+=n1;
if(mm21)
{
tt[d].win++;
tt[d].point+=3;
}
if(mm2
2)
{
tt[d].draws++;
tt[d].point+=1;
}
if(mm2==0)tt[d].losse++;
}
}
}
for(int j=0;j<m1;j++)
{
tt[j].num=tt[j].win1-tt[j].losse1;
}
sort(tt,tt+m1,comp);
cout<<“Group “<<i+1<<”:”<<endl;
for(int j=0;j<m1;j++)
{
cout<<tt[j].name<<" “<<tt[j].point<<” “;
cout<<tt[j].win<<” “<<tt[j].losse<<” “;
cout<<tt[j].draws<<” “<<tt[j].win1<<” “<<tt[j].losse1<<endl;
}
cout<<endl;
}
}
e题 属于只是范畴的窄小,没有学会此题涉及的知识,运用了dp 01背包。然后题意也较难理解,对内一起讨论出来的,每一行选择一种药,使能拯救的人最多。
#include<bits/stdc++.h>
#include
#define ll long long
using namespace std;
//01背包
const int k=4;
const int maxn=100;
int val[maxn][k+1];
int cost[maxn][k+1];
int dp[100000];
int main()
{
int m;
cin>>m;
for(int e=0;e<m;e++)
{
int n,v;
cin>>n>>v;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
cin>>cost[i][j];
cin>>val[i][j];
}
}
for(int i=0;i<=v;i++)
{
dp[i]=0;
}
for(int i=1;i<=n;i++)
{
for(int j=v;j>=0;j–)
{
for(int d=1;d<=k;d++)
{
if(j>=cost[i][d])
{
dp[j]=max(dp[j],dp[j-cost[i][d]]+val[i][d]);
}
}
}
}
cout<<“Budget #”<<e+1<<”: Maximum of “<<dp[v]<<” lives saved."<<endl<<endl;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值