题目
A:
分析:
大水题 模拟
代码:
#includeusing namespace std;int main(){ int n; int x=0;scanf("%d",&n); while(n>=100){ x++; n-=100; } while(n>=20){ x++; n-=20; } while(n>=10){ x++; n-=10; } while(n>=5){ x++; n-=5; } printf("%d\n",x+n);}
B:
分析:
把之前无用的循环全部减掉,最后暴力模拟一下就ok
代码:
#includeusing namespace std;const int maxn=2000005;int a[maxn];int main(){ int n,minv=1e9+5;scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); minv=min(minv,a[i]); }// printf("========= %d\n",minv); int k=0; for(;k
C:
分析:
代码:
D:
分析:
贪心+暴力。
扫一遍,把另外一个位置的数暴力swap过来
代码:
#includeusing namespace std;const int maxn=300;int a[maxn], ok[maxn];int main(){ int n;scanf("%d",&n); n*=2; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } int ans=0; for(int i=1;i<=n;i++){ if(ok[a[i]]) continue; int j; ok[a[i]]=1; for(j=i+1;j<=n;j++){ if(a[j]==a[i]) break; } // printf("--------- %d\n",j); for(int k=j;k>=i+1;k--){ swap(a[k],a[k-1]); } ans+=j-i-1; }// for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("%d",ans); return 0;}
E:
分析:
代码:
#includeusing namespace std;const int maxn=100005;typedef long long ll;int ans[maxn];ll sqr(ll x){ return x*x; }struct Node{ ll x,y,id;}s[maxn];int main(){ int n; scanf("%d",&n ); ll P=1500000; P=P*P; ll sumx=0,sumy=0; for(int i=1;i<=n;i++){ scanf("%I64d%I64d",&s[i].x,&s[i].y); s[i].id=i; } for(;;){ random_shuffle(s+1,s+1+n); ll X=0,Y=0; memset(ans,0,sizeof(ans)); for(int i=1;i<=n;i++){ ll valx=s[i].x,valy=s[i].y; if(sqr(X-valx)+sqr(Y-valy) > sqr(X+valx) + sqr(Y+valy)){ X+=valx; Y+=valy; ans[s[i].id]=-1; } else{ X-=valx; Y-=valy; ans[s[i].id]=1; } } if(sqr(X)+sqr(Y)<=P){ for(int i=1;i<=n;i++) printf("%d ",ans[i]); return 0; } }}