zoukankan      html  css  js  c++  java
  • POJ

    1003  Hangover

     1 #include<stdio.h>
     2 int main()
     3 {
     4     double c, cur_len;
     5     scanf_s("%lf", &c);
     6     while (1)
     7     {
     8         if (c < 0.0001)
     9             break;
    10         cur_len = 1.0 / 2;
    11         int count = 1;
    12         while (cur_len<c)
    13         {
    14             count++;
    15             cur_len += 1.0 / (count + 1);
    16         }
    17         printf("%d card(s)\n", count);
    18         scanf_s("%lf", &c);
    19     }
    20     return 0;
    21 }
    View Code

    1004  Financial Management

     1 /*
     2     水题,求平均数
     3     注意小数点后保留两位即可
     4 */
     5 #include<stdio.h>
     6 int main()
     7 {    
     8     int i;
     9     double sum=0, num,result;
    10     for (i = 0; i < 12; i++)
    11     {
    12         scanf_s("%lf", &num);
    13         sum += num;
    14     }
    15     printf("$%.2lf\n", sum / 12);
    16     return 0;
    17 }
    View Code

    1005  I Think I Need a Houseboat

     1 /*
     2     注意每年累加的是面积,不是半径,半径会越来越小
     3 */
     4 #include<stdio.h>
     5 #include<math.h>
     6 #define pi 3.141592
     7 int main()
     8 {
     9     int N;
    10     double X, Y,Z;
    11     scanf_s("%d", &N);
    12     int count = 1;
    13     while (N--)
    14     {
    15         scanf_s("%lf%lf", &X, &Y);
    16         Z = pi*(X*X + Y*Y) / 100;
    17         printf("Property %d: This property will begin eroding in year %d.\n", count, int(Z+1));
    18         ++count;
    19     }
    20     printf("END OF OUTPUT.\n");
    21     return 0;
    22 }
    View Code

    1006  Biorhythms

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {    int p,e,i,d,j,no=1;
     5     cin>>p>>e>>i>>d;
     6     while(p!=-1 && e!=-1 && i!=-1 && d!=-1)
     7     {    for(j=d+1;j<=21252;j++)
     8             if((j-p)%23==0)
     9                 break;
    10         for(;j<=21252;j=j+23)
    11             if((j-e)%28==0)
    12                 break;
    13         for(;j<=21252;j=j+23*28)
    14             if((j-i)%33==0)
    15                 break;
    16         cout<<"Case "<<no;
    17         cout<<": the next triple peak occurs in ";
    18         cout<<j-d<<" days."<<endl;
    19         cin>>p>>e>>i>>d;
    20         no++;
    21     }
    22     return 0;
    23 }
    View Code

    1007  DNA Sorting

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 struct dna
     5 {
     6     int num;
     7     string s;
     8 }DNA[100];
     9 int inversionNum(string s)
    10 {
    11     int ans = 0,len;
    12     int A, C, G;
    13     A = C = G = 0;
    14     len = s.length();
    15     for (int i = len - 1; i >= 0; i--)
    16     {
    17         switch (s[i])
    18         {
    19         case 'A':
    20             A++;
    21             break;
    22         case 'C':
    23             C++;
    24             ans += A;
    25             break;
    26         case 'G':
    27             G++;
    28             ans += A;
    29             ans += C;
    30             break;
    31         case 'T':
    32             ans += A;
    33             ans += C;
    34             ans += G;
    35         }
    36     }
    37     return ans;
    38 }
    39 int cmp(const void *a, const void *b)
    40 {
    41     return (*(dna*)a).num > (*(dna*)b).num ? 1 : -1;
    42 }
    43 int main()
    44 {
    45     int n, m, i;
    46     cin >> n >> m;
    47     for (i = 0; i < m; i++)
    48     {
    49         cin >> DNA[i].s;
    50         DNA[i].num = inversionNum(DNA[i].s);
    51     }
    52     qsort(DNA,m,sizeof(DNA[0]),cmp);
    53     for (i = 0; i < m; i++)
    54         cout << DNA[i].s << '\n';
    55     return 0;
    56 }
    View Code

    1008  Maya Calendar

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 string m[19] = {"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax",
     5                 "zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};
     6 string d[20] = {"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok",
     7                 "chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
     8 int search(string hm)
     9 {
    10     for (int i = 0; i < 19; i++)
    11         if (hm == m[i])
    12             return i;
    13 }
    14 int main()
    15 {
    16     int n,hd,hy,hm1,hdays,ty,days;
    17     string hm;
    18     cin >> n;
    19     cout << n << endl;
    20     while (n--)
    21     {
    22         cin >> hd >> hm >> hm >> hy;
    23         hm1 = search(hm);
    24         hdays = hy * 365 + hm1 * 20 + hd ;
    25         ty = hdays / 260;
    26         days = hdays % 260;
    27         cout << days % 13+1 << " " << d[days % 20] << " " << ty << endl;
    28     }
    29     return 0;
    30 }
    View Code

    1017  Packets

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {    int b1,b2,b3,b4,b5,b6; //不同大小的木块个数
     5     int nTotal=0; //最少需要的箱子数目
     6     int c1; //当前能放1*1木块的空格数目
     7     int c2; //当前能放2*2木块的空格数目
     8     int Contain2[4]={0,5,3,1};
     9     while(1)
    10     {    cin>>b1>>b2>>b3>>b4>>b5>>b6;
    11         if(b1==0 && b2==0 && b3==0 && b4==0 && b5==0 && b6==0)
    12             break;
    13         nTotal=b6+b5+b4+(b3+3)/4;
    14         c2=5*b4+Contain2[b3%4];
    15         if(b2>c2)    nTotal+=(b2-c2+8)/9;
    16         c1=36*nTotal-36*b6-25*b5-16*b4-9*b3-4*b2;
    17         if(b1>c1)    nTotal+=(b1-c1+35)/36;
    18         cout<<nTotal<<endl;
    19     }
    20     return 0;
    21 }
    View Code

    1083  Moving Tables

     1 /* 
     2     方法:记录每个房间前的走廊被用过多少次,答案为10*次数
     3     注意范围的确定,若下限为偶数,则下限需减1,若上限为奇数,则上限需加1
     4     例如,s=4,t=7时,房间4到房间7之间的走廊都要占用,而房间4前的走廊与房间3前的走廊是一样的,
     5     房间7前与房间8前的走廊也是一样的,所以要扩大的更新范围为[3,8]
     6 */
     7 
     8 #include<cstdio>
     9 #include<cstdlib>
    10 #include<iostream>
    11 using namespace std;
    12 int cmp(const void *a, const void *b)
    13 {
    14     return *(int *)a > *(int *)b ? 1 : -1;
    15 }
    16 int main()
    17 {
    18     int T,N,s,t,i,j,temp;
    19     int room[400];
    20     scanf_s("%d", &T);
    21     while (T--)
    22     {
    23         memset(room, 0, sizeof(room));//注意每次测试都要初始化,而不是在输入测试次数前初始化
    24         scanf_s("%d", &N);
    25         for (i = 0; i < N; i++)
    26         {
    27             scanf_s("%d%d", &s, &t);
    28             if (s > t)
    29             {
    30                 temp = s;
    31                 s = t;
    32                 t = temp;
    33             }
    34             if (s % 2 == 0)  
    35                 s--;
    36             if (t % 2 != 0)
    37                 t++;
    38             for (j = s; j <t; j+=2)
    39                 room[j]++;
    40         }
    41         qsort(room, 400, sizeof(room[0]), cmp);
    42         printf("%d\n", 10*room[399]);
    43     }
    44     return 0;
    45 }
    View Code

    1088  滑雪

     1 #include<iostream>
     2 using namespace std;
     3 int map[101][101] = { 0 };//存原始数据
     4 int r, c;//行数,列数
     5 int dp[101][101] = { 0 };//存储节点的最长路径值
     6 int dfs(int from, int to)
     7 {
     8     //如果已经记录了值,直接返回
     9     if (dp[from][to] > 0)
    10         return dp[from][to];
    11     int zuo=0, you=0, shang=0, xia=0;
    12     //处理下路,并剪枝
    13     if (from + 1 <= r)
    14     {
    15         if (map[from + 1][to] < map[from][to])
    16             xia = 1 + dfs(from + 1, to);
    17         else
    18             xia = 1;
    19     }
    20     else
    21         xia = 1;
    22     //处理上路,并剪枝
    23     if (from - 1 > 0)
    24     {
    25         if (map[from - 1][to] < map[from][to])
    26             shang = 1 + dfs(from - 1, to);
    27         else
    28             shang = 1;
    29     }
    30     else
    31         shang = 1;
    32     //处理右路,并剪枝
    33     if (to + 1 <= c)
    34     {
    35         if (map[from][to + 1] < map[from][to])
    36             you = 1 + dfs(from, to + 1);
    37         else
    38             you = 1;
    39     }
    40     else
    41         you = 1;
    42     //处理左路,并剪枝
    43     if (to - 1 > 0)
    44     {
    45         if (map[from][to - 1] < map[from][to])
    46             zuo = 1 + dfs(from, to - 1);
    47         else
    48             zuo = 1;
    49     }
    50     else
    51         zuo = 1;
    52     //返回最大值
    53     if (zuo < you)
    54         zuo = you;
    55     if (zuo < shang)
    56         zuo = shang;
    57     if (zuo < xia)
    58         zuo = xia;
    59     return zuo;
    60 }
    61 int main()
    62 {
    63     int i, j;
    64     cin >> r >> c;
    65     for (i = 1; i <= r; i++)
    66         for (j = 1; j <= c; j++)
    67             cin >> map[i][j];
    68     int ans = 0;
    69     for (i = 1; i <= r; i++)
    70         for (j = 1; j <= c; j++)
    71         {
    72             //记录每个节点的最长路径
    73             dp[i][j] = dfs(i, j);
    74             //选出最大长度
    75             if (ans < dp[i][j])
    76                 ans = dp[i][j];
    77         }
    78     cout << ans << endl;
    79     return 0;
    80 }
    View Code

    1258  Agri-Net (最小生成树)

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define MaxInt 100000
     4 #define N 101
     5 //创建map二维数组存储图表,low数组记录每2个点间的最小权值,
     6 //visited数组记录某点是否已访问
     7 int map[N][N], low[N], visited[N];
     8 int n;
     9 int prim()
    10 {
    11     int i, j, pos, min, result=0;
    12     memset(visited, 0, sizeof(visited));
    13     //从某点开始,分别标记和记录该点
    14     visited[1] = 1;
    15     pos = 1;
    16     //第一次给low数组赋值
    17     for (i = 1; i <= n; i++)
    18             low[i] = map[pos][i];
    19     //再运行n-1次
    20     for (i = 1; i < n; i++)
    21     {
    22         min = MaxInt;
    23         //找出最小权值并记录位置
    24         for(j = 1; j <= n; j++)
    25             if (visited[j] == 0 && min > low[j])
    26             {
    27                 min = low[j];
    28                 pos = j;
    29             }
    30         //最小权值累加
    31         result += min;
    32         //标记该点
    33         visited[pos] = 1;
    34         //更新权值
    35         for (j = 1; j <= n; j++)
    36             if (visited[j] == 0 && low[j] > map[pos][j])
    37                 low[j] = map[pos][j];
    38     }
    39     return result;
    40 }
    41 int main()
    42 {
    43     int i, j;
    44     while (scanf_s("%d", &n) != EOF)
    45     {
    46         for (i = 1; i <= n; i++)
    47             for (j = 1; j <= n; j++)
    48                 scanf_s("%d", &map[i][j]);
    49         printf("%d\n", prim());
    50     }
    51     return 0;
    52 }
    View Code

    1328  Radar Installation(贪心)

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstdlib>
     4 using namespace std;
     5 struct point
     6 {    
     7     double left, right;
     8 }p[1001];
     9 int cmp(const void *a, const void *b)
    10 {    
    11     return (*(point *)a).left> (*(point *)b).left ? 1 : -1;
    12 }
    13 int main()
    14 {
    15     int i,n,d,count = 0,y;
    16     double dist,x;
    17     bool flag;
    18     while (cin >> n >> d && n != 0 && d != 0)
    19     {
    20         count++;
    21         flag = false;
    22         if (d <0)  flag = true;
    23         for (i = 0; i < n; i++)
    24         {
    25             cin >> x >> y;
    26             if (abs(y) <= d)
    27             {
    28                 //计算区间
    29                 dist = sqrt(double(d*d - y*y));
    30                 p[i].left = x - dist;
    31                 p[i].right = x + dist;
    32             }
    33             else
    34                 flag = true;
    35         }
    36         if (flag)
    37         {
    38             cout << "Case " << count << ": -1"<<endl ;
    39             continue;
    40         }
    41         qsort(p,n,sizeof(p[0]),cmp);//排序
    42         x = p[0].right; 
    43         int m = 1;//雷达个数初始化为1
    44         //寻找最少区间个数
    45         for (i = 1; i < n; i++)
    46         {
    47             if (p[i].left > x)
    48             {
    49                 m++;
    50                 x= p[i].right;
    51             }
    52             else
    53             {
    54                 if (p[i].right < x)
    55                     x= p[i].right;//更新右端点
    56             }
    57         }
    58         cout << "Case " << count << ": " << m << endl; 
    59     }
    60     return 0;
    61 }
    View Code

    1331  Multiply

     1 #include<stdio.h>
     2 #include<string.h>
     3 int b2ten(int x,int b);
     4 int main()
     5 {    int p,q,r,n,b;
     6     scanf("%d",&n);
     7     while(n--)
     8     {    scanf("%d%d%d",&p,&q,&r);
     9         for(b=2;b<=16;b++)
    10         {    long p2=b2ten(p,b);
    11             long q2=b2ten(q,b);
    12             long r2=b2ten(r,b);
    13             if(p2==-1||q2==-1||r2==-1)    continue;
    14             if(p2*q2==r2)    { printf("%d\n",b); break; }
    15         }
    16         if(b==17)    printf("0\n");
    17     }
    18     return 0;
    19 }
    20 int b2ten(int x,int b)
    21 {    char tmp[100];
    22     int ret=0;
    23     sprintf(tmp,"%d",x);
    24     int len=strlen(tmp);
    25     for(int i=0;i<len;i++)
    26     {    if(tmp[i]-'0'>=b)    return -1;
    27         ret*=b;
    28         ret+=tmp[i]-'0';
    29     }
    30     return ret;
    31 }
    View Code

    1503  Integer Inquiry

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int sum[102] = {0};
     6     char s[101];
     7     int i, j, len, c;
     8     gets_s(s);
     9     while (1)
    10     {
    11         if (s[0] == '0' && strlen(s) == 1)
    12             break;
    13         len = strlen(s);
    14         c = 0;
    15         for (i = len - 1, j = 0; i >= 0; i--, j++)
    16         {
    17             sum[j] += s[i]-'0' + c;
    18             c = sum[j] / 10;
    19             sum[j] = sum[j] % 10;
    20         }
    21         while (c > 0)
    22         {
    23             sum[j] += c;
    24             c = sum[j] / 10;
    25             sum[j] = sum[j] % 10;
    26             j++;
    27         }
    28         gets_s(s);
    29     }
    30     i = 101;
    31     while (sum[i] == 0)
    32         i--;
    33     while (i >= 0)
    34         printf("%d", sum[i--]);
    35     printf("\n");
    36     return 0;
    37 }
    View Code

    2080  Calendar

     1 #include<stdio.h>
     2 int type(int);   /*判断是否为闰年*/
     3 char week[7][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
     4 int year[2]={365,366};   /*year[0]表示非闰年的天数,year[1]表示闰年的天数。*/
     5 int month[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,
     6                   31,29,31,30,31,30,31,31,30,31,30,31};
     7 /*month[0]表示非闰年里每个月的天数,month[1]表示闰年里每个月的天数。*/
     8 int main()
     9 {    int days,dayofweek;  /*days表示输入的天数,dayofweek表示星期几。*/
    10     int i,j;
    11     while(scanf("%d",&days)&&days!=-1)
    12     {    dayofweek=days%7;
    13         for(i=2000;days>=year[type(i)];i++)
    14             days-=year[type(i)];
    15         for(j=0;days>=month[type(i)][j];j++)
    16             days-=month[type(i)][j];
    17         printf("%d-%02d-%02d %s\n",i,j+1,days+1,week[dayofweek]);
    18     }
    19     return 0;
    20 }
    21 int type(int m)
    22 {    if(m%4!=0||(m%100==0&&m%400!=0))
    23         return 0;
    24     else return 1;
    25 }
    View Code

    2159  Ancient Cipher

    解法1: //Time  16MS

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {    
     7     int i;
     8     int x[26], y[26];
     9     memset(x, 0, sizeof(x));
    10     memset(y, 0, sizeof(y));
    11     string input;
    12     cin >> input;
    13     for (i = 0; i < input.length(); i++)
    14     {
    15         x[input[i] - 'A']++;
    16     }
    17     cin >> input;
    18     for (i = 0; i < input.length(); i++)
    19     {
    20         y[input[i] - 'A']++;
    21     }
    22     sort(x, x + 26);
    23     sort(y, y + 26);
    24     for (i = 0; i < 26; i++)
    25         if (x[i] != y[i])
    26         {
    27             cout << "NO" << endl;
    28             return 0;
    29         }
    30     cout << "YES" << endl;
    31     return 0;
    32 }
    View Code

    解法2: //Time   0MS

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int cmp(const void *a, const void *b)
     4 {
     5     return *(int *)a > *(int *)b?1:-1;
     6 }
     7 int main()
     8 {
     9     int i;
    10     int x[26], y[26];
    11     char input[101];
    12     for (i = 0; i < 26; i++)
    13         x[i] = y[i] = 0;
    14     gets_s(input);
    15     for (i = 0; input[i]; i++)
    16         x[input[i] - 'A']++;
    17     gets_s(input);
    18     for (i = 0; input[i]; i++)
    19         y[input[i] - 'A']++;
    20     qsort(x, 26, sizeof(x[0]), cmp);
    21     qsort(y, 26, sizeof(y[0]), cmp);
    22     for (i = 0; i < 26;i++)
    23         if (x[i] != y[i])
    24         {
    25             printf("NO\n");
    26             return 0;
    27         }
    28     printf("YES\n");
    29     return 0;
    30 }
    View Code

    3069  Saruman's Army(贪心)

     1 #include<stdio.h>
     2 #include<algorithm>
     3 using namespace std;
     4 int x[1001],N,R;
     5 void solve()
     6 {
     7     for (int i = 0; i < N; i++)
     8         scanf_s("%d",&x[i]);
     9     sort(x, x + N);
    10     int i = 0,ans=0;
    11     while (i < N)
    12     {
    13         //s是没有被覆盖的最左的点的位置
    14         int s = x[i++];
    15         //一直向右前进直到距s的距离大于R的点
    16         while (i < N && x[i] <= s + R)
    17             i++;
    18         //p是新加上标记的点的位置
    19         int p = x[i - 1];
    20         //一直向右前进直到距p的距离大于R的点
    21         while (i < N && x[i] <= p + R)
    22             i++;
    23         ans++;
    24 
    25     }
    26     printf("%d\n",ans);
    27 }
    28 int main()
    29 {
    30     while (scanf_s("%d%d", &R, &N) != EOF)
    31     {
    32         if (N != -1 && R != -1)
    33             solve();
    34         else
    35             break;
    36     }
    37     return 0;
    38 }
    View Code


     

  • 相关阅读:
    Manachar’s Algorithm
    脑裂 CAP PAXOS 单元化 网络分区 最终一致性 BASE
    Scheduling Multithreaded Computations by Work Stealing
    QQ好友状态,QQ群友状态,究竟是推还是拉? 网页端收消息,究竟是推还是拉?
    支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型
    0到1:微信后台系统的演进之路 原创 张文瑞 InfoQ 2016-01-14
    救火必备!问题排查与系统优化手册
    如何紧急定位线上内存泄露? 原创 朱云锋 阿里技术 2019-12-20
    如何应对C语言内存泄露! 华为开发者社区 2020-09-29
    一次I/O问题引发的P0重大故障[改版重推] 原创 二马读书 二马读书 8月16日 这是前段时间发的一篇文章,很多读者反馈,文章没有揭示故障发生的详细
  • 原文地址:https://www.cnblogs.com/longzu/p/4383412.html
Copyright © 2011-2022 走看看