这周做了一下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同意,禁止转载,侵权者必究。