百度之星

HDU4823

图片说明

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
const int N=100010;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const ll INF64 = 0x3f3f3f3f3f3f3f3f;
ll qpow(ll a,int b){ll ans=1;while(b){if(b&1) ans=ans*a;a*=a;b>>=1;}return ans;}

ll n,m,v,k; 

int main(){
    int T;
    cin>>T;
    while(T--){
        cin>>n>>m>>v>>k;
        int ans=0;
        if(m>=n){
            cout<<0<<endl;
            continue;
        }
        else{
            while(m<n){
                ll tmp=(m-v)*k;
                if(tmp>m){
                    ans++;
                    m=tmp;
                }
                else{
                    ans=-1;
                    break;
                }
            }
            cout<<ans<<endl;
        }
    }
}

HDU6743

#include<bits/stdc++.h>
using namespace std;
const int N=100010;

struct node{
    int x,y;
    int ans;
}a[N];

bool cmp(node a,node b){
    return a.ans<b.ans;
} 
int main(){
    int n,m;
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m;
        for(int i=0;i<n;i++) {
            cin>>a[i].x>>a[i].y;
            int tt=m/a[i].x;
            if(tt*a[i].x!=m) ++tt;//要避免除0,RE
            a[i].ans=tt*a[i].y;
        }
        sort(a,a+n,cmp);
        cout<<a[0].ans<<endl;
    }
}

HDU6744

#include <bits/stdc++.h>
using namespace std;

int score[] {95, 90, 85, 80, 75, 70, 67, 65, 62, 60, 0};
double point[] {4.3, 4.0, 3.7, 3.3, 3.0, 2.7, 2.3, 2.0, 1.7, 1.0, 0};

int main()
{
    int test;
    cin>>test;
    while(test--){
        int x; cin>>x; double ans=0;
        for(int i=0; i<11; i++)
            for(int j=0; j<11; j++)
                for(int k=0; k<11; k++)
                    for(int t=0; t<11; t++)
                        if(score[i]+score[j]+score[k]+score[t]<=x)
                            ans=max(ans, point[i]+point[j]+point[k]+point[t]);

        printf("%.1lf\n", ans);
    }

    return 0;
}

HDU6745

题目描述:
图片说明


一开始没看出来是DP,一脸懵逼,如果知道是DP的话就好做了,只需要判断当前的状态两个是否是互质,是的话就+1,不是的话就取前一状态的最大值。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int a,b,dp[N][N];
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int main(){
    //ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
    for(int i=1;i<=1000;i++){
        for(int j=1;j<=1000;j++){
            dp[i][j]=max(dp[i-1][j],dp[i][j-1])+(gcd(i,j)==1);
        }
    }
    int n,m;
    int t;
    scanf("%d",&t);//要用更快的输入输出方式,用cin关同步都会超时。
    while(t--){
        scanf("%d%d",&a,&b);
        printf("%d\n",dp[a][b]);
    }
}
杂题题解 文章被收录于专栏

看菜鸡做的水题

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务