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(t1tt[d].name)
{
tt[d].win1+=n1;
tt[d].losse1+=n2;
if(mm11)
{
tt[d].win++;
tt[d].point+=3;
}
if(mm12)
{
tt[d].draws++;
tt[d].point+=1;
}
if(mm10)tt[d].losse++;
}
if(t2tt[d].name)
{
tt[d].win1+=n2;
tt[d].losse1+=n1;
if(mm21)
{
tt[d].win++;
tt[d].point+=3;
}
if(mm22)
{
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;
}
}