这周做了一下2011的提高组的题目。算是比较简单的了。

D1T1

#include<iostream>
#include<cstdio>
using namespace std;
const int mx=10010;
int n,a[mx],b[mx],c[mx],d[mx],x,y;
int main()
{
    int ans=-1; 
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
    scanf("%d%d",&x,&y);
    for(int i=1;i<=n;i++){
        if(a[i]<=x&&x<=a[i]+c[i]&&b[i]<=y&&y<=b[i]+d[i])ans=i;
    }
    printf("%d",ans);
    return 0;
}

D1T2——这题的做法很巧妙

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,q,x=0,ans=0,kind,cost;
int c[100]={0},sum[100]={0},qian[100]={0};
int main()
{
    scanf("%d%d%d",&n,&m,&q);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&kind,&cost);
        if(q>=cost)x=i;
        if(x!=0&&qian[kind]<=x)c[kind]=sum[kind];
        sum[kind]++;
        qian[kind]=i;
        ans+=c[kind];
    }
    printf("%d\n",ans);
    return 0;
}

D1T3——未提供

D2T1

#include<iostream>
#include<cstdio>
using namespace std;
const int mod=10007;
int num[1010][1010];
int a,b,k,n,m;
void init(){
    num[1][1]=1;
    for(int i=2;i<=k+1;i++)num[i][1]=num[i][i]=1;
    for(int i=3;i<=k+1;i++){
        for(int j=2;j<=i;j++){
            num[i][j]=(num[i-1][j-1]+num[i-1][j])%mod;
        }
    }
} 
int kuai(int x,int q){
    int ans=1;
    while(q){
        if(q%2)ans=(ans*x)%mod;
        x=(x*x)%mod;
        q/=2;
    }
    return ans;
}
int main()
{
    scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
    init();
    a%=mod;b%=mod;
    int ans=(kuai(a,n)*kuai(b,m))%mod;
    ans=(ans*num[k+1][m+1])%mod;
    printf("%d",ans);
    return 0;
}

D2T3

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
inline ll read(){
    ll num=0,t=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')t=-1;c=getchar();}
    while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();}
    return num*t;
}
const int maxn=200100;
ll n,m,s,w[maxn],v[maxn],l[maxn],r[maxn];
ll z1[maxn]={0},z2[maxn]={0};
ll find(ll W){
    memset(z1,0,sizeof(z1));
    memset(z2,0,sizeof(z2));
    for(ll i=1;i<=n;i++){
        z1[i]=z1[i-1];z2[i]=z2[i-1];
        if(w[i]>=W)z1[i]+=v[i],z2[i]+=1;
    }
    ll Y=0;
    for(ll i=1;i<=m;i++){
        Y+=(z1[r[i]]-z1[l[i]-1])*(z2[r[i]]-z2[l[i]-1]);
        //if(W==3)cout<<"YYY:"<<Y<<"\n";
    }
    return Y;
}
ll Ans=2147483640000;
void erfen(ll l,ll r){
    ll W=(l+r)/2;
    ll y=find(W);
    ll q=y-s;if(q<0)q=-q;
    if(Ans>q)Ans=q;
    //cout<<"W:"<<W<<"\n";
    //cout<<"l:"<<l<<" r:"<<r<<"\n";
    //cout<<"Y:"<<y<<"\n";
    if(l==r)return;
    if(y>s){erfen(W+1,r);}
    else {erfen(l,W);}
}
int main()
{
    n=read();m=read();s=read();
    for(ll i=1;i<=n;i++){w[i]=read();v[i]=read();}
    for(ll i=1;i<=m;i++){l[i]=read();r[i]=read();}
    ll big=w[0],small=0;
    for(ll i=1;i<=n;i++)if(big<w[i])big=w[i];
    erfen(small,big);
    printf("%lld\n",Ans);
    return 0;
}

D2T3——未提供

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

posted on 2017-05-02 22:02  Yzyet  阅读(248)  评论(0编辑  收藏  举报