• 2015_7


    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=73872#status//-/0/ 密码123

    a  每个区间输出对应字符串  水题看姿势

     1 #include<cstdio>
     2 int a[]={1,5,10,20,50,100,250,500,1000,2001};
     3 char b[][16]={"few","several","pack","lots","horde","throng","swarm","zounds","legion"};
     4 int main(){
     5     int n;
     6     while(~scanf("%d",&n)){
     7         for(int i=0;i<9;i++){
     8             if(n>=a[i]&&n<a[i+1]){
     9                 puts(b[i]);
    10                 break;
    11             }
    12         }
    13     }
    14     return 0;
    15 }
    View Code

     b 最少花费变成目标,枚举起点,计算花费

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 char a[]="Sandro";
     6 char b[210];
     7 bool type(char c){
     8     return c>='a'&&c<='z';
     9 }
    10 int val(char c){
    11     if(type(c)) return c-'a';
    12     return c-'A';
    13 }
    14 int get(char a,char b){
    15     if(a==b) return 0;
    16     if(type(a)==type(b)) return 5;
    17     if(val(a)==val(b)) return 5;
    18     return 10;
    19 }
    20 int main(){
    21     while(~scanf("%s",b)){
    22         int lb=strlen(b);
    23         int ans=0x3f3f3f3f;
    24         for(int i=0;i+5<lb;i++){
    25             int sum=0;
    26             for(int j=0;j<6;j++){
    27                 sum+=get(b[i+j],a[j]);
    28             }
    29             ans=min(ans,sum);
    30         }
    31         printf("%d
    ",ans);
    32     }
    33     return 0;
    34 }
    View Code

    c 每分钟来若干车 每分钟走k车,问最后剩多少,模拟

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 int main(){
     6     int k,n,x;
     7     while(~scanf("%d%d",&k,&n)){
     8         int ans=0;
     9         while(n--){
    10             scanf("%d",&x);
    11             ans+=x;
    12             if(ans>=k){
    13                 ans-=k;
    14             }
    15             else{
    16                 ans=0;
    17             }
    18         }
    19         printf("%d
    ",ans);
    20     }
    21     return 0;
    22 }
    View Code

     d n男m女配对,使得烦恼值最小,排序后,贪心,枚举配对数,求最小值

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int M=123;
     6 int a[M],b[M];
     7 bool cmp(const int &a,const int &b){
     8     return a>b;
     9 }
    10 int main(){
    11     int n,m;
    12     while(~scanf("%d%d",&n,&m)){
    13         for(int i=0;i<n;i++){
    14             scanf("%d",&a[i]);
    15         }
    16         for(int i=0;i<m;i++){
    17             scanf("%d",&b[i]);
    18         }
    19         sort(a,a+n,cmp);
    20         sort(b,b+m,cmp);
    21         int ans=0x3f3f3f3f;
    22         int sma=min(n,m);
    23         for(int i=0;i<=sma;i++){
    24             int sum=0;
    25             for(int j=i;j<n;j++){
    26                 sum+=a[j];
    27             }
    28             for(int j=i;j<m;j++){
    29                 sum+=b[j]*i;
    30             }
    31             ans=min(ans,sum);
    32         }
    33         printf("%d
    ",ans);
    34     }
    35     return 0;
    36 }
    View Code

    e n个盒子,宝藏在其中一个盒子中,每次可以打开一个盒子查看,如果找到游戏结束,如果没有找到,关上盒子后宝藏会随机移动到相邻的左或右的盒子中,问如何顺序开盒子保证能找到

    做法,从1开到n,若一开始宝藏在奇数号盒子中,则一定能找到,否则有可能恰好躲过。若躲过,说明一开始在偶数号,如果盒子总数是奇数,则经过n次后宝藏就在奇数号,再从1到n依次看就能找到,若总数是偶数,则盒子还在偶数号盒子中,那就开一次1号,使他移动到奇数号盒子,然后从头到尾开一次。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<vector>
     5 using namespace std;
     6 vector<int> ans;
     7 int main(){
     8     int n;
     9     while(~scanf("%d",&n)){
    10         ans.clear();
    11         for(int i=1;i<=n;i++){
    12             ans.push_back(i);
    13         }
    14         if(n%2==0) ans.push_back(1);
    15         for(int i=1;i<=n;i++){
    16             ans.push_back(i);
    17         }
    18         int la=ans.size();
    19         printf("%d
    ",la);
    20         for(int i=0;i<la;i++){
    21             if(i) printf(" ");
    22             printf("%d",ans[i]);
    23         }
    24         puts("");
    25     }
    26     return 0;
    27 }
    View Code

     H 要满足图中3个的交集的值要是3个集合权值之和模2,只能换一位或者不换,暴力找

     1 #include<cstdio>
     2 int a[8];
     3 bool judge(){
     4     return a[6]==a[0]^a[1]^a[3]&&a[5]==a[0]^a[2]^a[3]&&a[4]==a[1]^a[2]^a[3];
     5 }
     6 void out(){
     7     for(int i=0;i<7;i++){
     8         printf("%d%c",a[i],i==6?'
    ':' ');
     9     }
    10 }
    11 int main(){
    12     while(~scanf("%d",&a[0])){
    13         for(int i=1;i<7;i++){
    14             scanf("%d",&a[i]);
    15         }
    16         if(judge()){
    17             out();
    18             continue;
    19         }
    20         for(int i=0;i<7;i++){
    21             a[i]^=1;
    22             if(judge()){
    23                 out();
    24                 break;
    25             }
    26             a[i]^=1;
    27         }
    28     }
    29     return 0;
    30 }
    View Code

    i 两个高度一样的圆台,上圆大下圆小,放入一个矩形托盘中,问是否能放下,如果碗比托盘矮,等价于两个圆放入矩形中,如果碗比较高,通过比例算出与托盘等高的圆的半径,然后圆心对角放,算一下圆心距,要大于等于上面圆半径之和即可。

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<algorithm>
     4 using namespace std;
     5 struct point{
     6     double x,y;
     7 }A,B;
     8 double Distance2(point a,point b){
     9     return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
    10 }
    11 void yes(){
    12     puts("YES");
    13 }
    14 void no(){
    15     puts("NO");
    16 }
    17 int main(){
    18     double a,b,d,Ar,AR,Br,BR,h,Ax,Bx;
    19     while(~scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a,&b,&d,&Ar,&AR,&Br,&BR,&h)){
    20         if(a<b) swap(a,b);
    21         Ax=AR;
    22         Bx=BR;
    23         if(h>d){
    24             Ax=d*(AR-Ar)/h+Ar;
    25             Bx=d*(BR-Br)/h+Br;
    26         }
    27         if(Ax<Bx) swap(Ax,Bx);
    28         if(Ax*2>b){
    29             no();
    30             continue;
    31         }
    32         A.x=Ax;
    33         A.y=Ax;
    34         B.x=a-Bx;
    35         B.y=b-Bx;
    36         if(Distance2(A,B)>=(AR+BR)*(AR+BR)){
    37             yes();
    38         }
    39         else{
    40             no();
    41         }
    42     }
    43     return 0;
    44 }
    View Code

     j 已知所有人围成一圈,确定起点以后依次顺时针出场,输入每个人想第几个出场,问谁第一个出场满足最多人的需求,

    知道某个人想第几个出场,往前算就知道谁第一个出场能满足她,那么统计一下,最后就知道每个人作为第一个能满足几个。

     1 #include<cstdio>
     2 const int M=1e5+10;
     3 int a[M],cnt[M];
     4 int main(){
     5     int n;
     6     while(~scanf("%d",&n)){
     7         for(int i=1;i<=n;i++){
     8             scanf("%d",&a[i]);
     9             cnt[i]=0;
    10         }
    11         for(int i=1;i<=n;i++){
    12             int now=a[i];
    13             if(i>=now){
    14                 cnt[i-now+1]++;
    15                 continue;
    16             }
    17             cnt[n-(now-i)+1]++;
    18         }
    19         int ans=1;
    20         for(int i=1;i<=n;i++){
    21             if(cnt[ans]<cnt[i]){
    22                 ans=i;
    23             }
    24         }
    25         printf("%d
    ",ans);
    26     }
    27     return 0;
    28 }
    View Code

     k n人排队,每人买一种东西若干个,若商店没有了,这个人走,花一分钟;若商店东西足够他需求,买了走,商店这种产品减去他买的个数,花一分钟;若商品不够,记录一下剩多少,和排第二的人换一下位子,如果已经记录过,则看上次记录的值和当前剩的值是否相同,若相同将剩的全买走,若不同则记录一下当前剩的值,然后再和第二个人换位子。

    数组模拟n个人排队。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<map>
     4 using namespace std;
     5 const int M=1024;
     6 struct G{
     7     string s;
     8     int c,p;
     9 }g[M];
    10 char a[16],b[16];
    11 map<string,int> mp;
    12 int main(){
    13     int n,m,cnt;
    14     while(~scanf("%d",&m)){
    15         mp.clear();
    16         while(m--){
    17             scanf("%d%s%s",&cnt,a,b);
    18             mp[(string)b]=cnt;
    19         }
    20         scanf("%d",&n);
    21         for(int i=0;i<n;i++){
    22             scanf("%d%s%s",&cnt,a,b);
    23             g[i].c=cnt;
    24             g[i].s=(string)b;
    25             g[i].p=-1;
    26         }
    27         int ans=0;
    28         for(int i=0;i<n;i++,ans++){
    29             if(!mp[g[i].s]){
    30                 continue;
    31             }
    32             int shop=mp[g[i].s];
    33             if(shop>=g[i].c){
    34                 mp[g[i].s]-=g[i].c;
    35                 continue;
    36             }
    37             if(shop==g[i].p){
    38                 mp.erase(g[i].s);
    39                 continue;
    40             }
    41             if(i==n-1) continue;
    42             g[i].p=shop;
    43             swap(g[i],g[i+1]);
    44             i--;
    45         }
    46         printf("%d
    ",ans);
    47     }
    48     return 0;
    49 }
    View Code

     L 给出每种面值一开始的张数,给票的单价,现在问少了一张票以后,原来能买的张数现在不能买了,输出这些张数。贪心选面值最小的。

     1 #include<cstdio>
     2 int a[]={10,50,100,500,1000,5000};
     3 int b[8];
     4 int main(){
     5     int n;
     6     while(~scanf("%d",&b[0])){
     7         for(int i=1;i<6;i++){
     8             scanf("%d",&b[i]);
     9         }
    10         scanf("%d",&n);
    11         int big=0,sma=0;
    12         bool flag=false;
    13         for(int i=0;i<6;i++){
    14             big+=a[i]*b[i];
    15             if(!flag&&b[i]){
    16                 flag=true;
    17                 sma+=(b[i]-1)*a[i];
    18                 continue;
    19             }
    20             sma+=a[i]*b[i];
    21         }
    22         big/=n;
    23         sma=sma/n+1;
    24         printf("%d
    ",big-sma+1);
    25         for(int i=sma;i<=big;i++){
    26             if(i>sma) printf(" ");
    27             printf("%d",i);
    28         }
    29         puts("");
    30     }
    31     return 0;
    32 }
    View Code

    end

  • 相关阅读:
    void型指针转换。
    MSSQL数据库中记录生日与输入的年龄,进行比对
    [转][C#]内置的 DateTime 用法
    Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
    点击Repeater中的按钮,获取Repeater中TextBox中的值
    [转]UrlReWriter 使用经验小结收藏
    C#中实现VB.net中ReDim功能
    在存储过程中循环表中的记录集
    ADO.net取存储过程的返回值以及存储过程中Return和OUTPUT的区别
    部分FCKeditor常用JS函数
  • 原文地址:https://www.cnblogs.com/gaolzzxin/p/4393072.html
Copyright © 2020-2023  润新知