• Codeforces Daily


    每次读题都是伤.....

    Math

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int n, m, a;
     7     long long ans, x, y;
     8     cin >> n >> m >> a;
     9     x = n/a;
    10     y = m/a;
    11     if(n%a!=0) x++;
    12     if(m%a!=0) y++;
    13     ans = x*y;
    14     cout << ans << endl;
    15     return 0;
    16 }
    1A
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<string.h>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int n, a, all = 0,ch1[105],ch2[105];
     9     memset(ch1,0,sizeof(ch1));
    10     memset(ch2,0,sizeof(ch2));
    11     cin >> n;
    12     for(int i = 0; i < n; i++)
    13     {
    14         cin >> a;
    15         ch1[a]++;
    16     }
    17     for(int i = 0; i < n; i++)
    18     {
    19         cin >> a;
    20         ch2[a]++;
    21     }
    22     for(int i = 1; i <= 5; i++)
    23     {
    24         if((ch1[i]+ch2[i])%2 != 0)
    25         {
    26             cout << "-1
    ";
    27             return 0;
    28         }
    29         if((ch1[i] + ch2[i])==0)
    30             continue;
    31         if((ch1[i]!=ch2[i]))
    32         {
    33             all += abs((ch1[i] - ch2[i])/2);
    34         }
    35     }
    36     cout << all/2 << endl;
    37     return 0;
    38 }
    779A
     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 struct stu{
     6     int a, b;
     7 }p[200010];
     8 
     9 int cmpa(stu x, stu y){
    10     if(x.a==y.a)
    11         return x.b < y.b;
    12     return x.a < y.a;
    13 }
    14 
    15 int cmpb(stu x, stu y){
    16     if(x.b==y.b)
    17         return x.a < y.a;
    18     return x.b < y.b;
    19 }
    20 
    21 long long solve(int a){
    22     if(a < 2) return 0;
    23     return (long long)a*(a-1)/2;
    24 }
    25 
    26 int main()
    27 {
    28     int n;
    29     cin >> n;
    30     for(int i = 0; i < n; i++)
    31         cin >> p[i].a >> p[i].b;
    32     sort(p, p+n, cmpa);
    33     int cnt = 1, t = 0, num = 1;
    34     long long ans = 0;
    35     for(int i = 1; i < n; i++)
    36     {
    37         if(p[i].a == p[t].a)
    38             cnt++;
    39         else
    40         {
    41             ans += solve(cnt);
    42             t = i;
    43             cnt = 1;
    44         }
    45     }
    46     ans += solve(cnt);
    47 
    48     sort(p, p+n, cmpb);
    49     t = 0, cnt = 1;
    50     for(int i = 1; i < n; i++)
    51     {
    52         if(p[i].a == p[i-1].a && p[i].b == p[i-1].b)
    53             num++;
    54         else
    55         {
    56             ans -= solve(num);
    57             num = 1;
    58         }
    59 
    60         if(p[i].b == p[t].b)
    61             cnt++;
    62         else
    63         {
    64             ans += solve(cnt);
    65             t = i;
    66             cnt = 1;
    67         }
    68     }
    69     ans -= solve(num);
    70     ans += solve(cnt);
    71     cout << ans << endl;
    72     return 0;
    73 }
    650A

    Dp

     1 #include <stdio.h>
     2 long long d[100010], ans[100010];
     3 int main()
     4 {
     5     int n,k,a,b;
     6     scanf("%d%d", &n, &k);
     7     for(int i = 0; i < k; i++)
     8         d[i] = 1;
     9     ans[0] = 0;
    10     for(int i = k; i < 100010; i++)
    11     {
    12         d[i] = (d[i-1] + d[i-k])%1000000007;
    13     }
    14     for(int i = 1; i < 100010; i++)
    15     {
    16         ans[i] = (ans[i-1] + d[i])%1000000007;
    17     }
    18     while(n--)
    19     {
    20     scanf("%d%d", &a, &b);
    21     printf("%I64d
    ", (1000000007+ans[b]-ans[a-1])%1000000007);
    22     }
    23     return 0;
    24 }
    474D
     1 #include<iostream>
     2 #include<string.h>
     3 #define MAX 100010
     4 using namespace std;
     5 
     6 
     7 int main()
     8 {
     9     int n, ch[MAX],b[MAX];
    10     cin >> n;
    11     memset(ch,0,sizeof(ch));
    12     memset(b,0,sizeof(ch));
    13     for(int i = 1; i <= n; i++)
    14     {
    15         cin >> ch[i];
    16         if(ch[i] == ch[i-1])
    17             b[i] = b[i-1];//b[i]表示上一个不同于该元素的元素的位置
    18         else b[i] = i-1;
    19     }
    20     int ans =0;
    21     for(int i= n; i > 0; i--)
    22     {
    23         int len = 1, j = i-1;
    24         int num1 = ch[i];
    25         int num2 = MAX;
    26         while(j>0)
    27         {
    28             if(num1 == ch[j] || num2 == ch[j])
    29             {
    30                 len += j-b[j];
    31                 j = b[j];
    32             }
    33             else if(num2 == MAX)
    34             {
    35                 num2 = ch[j];
    36                 len += j-b[j];
    37                 j = b[j];
    38             }
    39             else break;
    40         }
    41         ans = max(ans, len);
    42         if(i < ans) break;
    43     }
    44     cout << ans << endl;
    45     return 0;
    46 }
    602B

    Brute_forces

     1 #include <iostream>
     2 #include <set>
     3 using namespace std;
     4 
     5 int ch1[105], ch2[105], ch3[105];
     6 
     7 int main()
     8 {
     9     int n;
    10     while(cin >> n)
    11     {
    12         int x=0, y=0, z=0, a;
    13         for(int i = 0; i < n; i++)
    14         {
    15             cin >> a;
    16             if(a == 0) ch3[z++] = a;
    17             else if(a > 0)
    18             {
    19                 ch2[y++] = a;
    20             }
    21             else ///a<0
    22             {
    23                 ch1[x++] = a;
    24             }
    25         }
    26         if(y == 0)
    27         {
    28             ch2[y++] = ch1[--x];
    29             ch2[y++] = ch1[--x];
    30         }
    31         if(x % 2 == 0)
    32         {
    33             ch3[z++] = ch1[--x];
    34         }
    35 
    36         cout << x;
    37         for(int i = 0; i < x; i++)
    38             cout << " " << ch1[i];
    39         cout << endl;
    40 
    41         cout << y;
    42         for(int i = 0; i < y; i++)
    43             cout << " " << ch2[i];
    44         cout << endl;
    45 
    46         cout << z;
    47         for(int i = 0; i < z; i++)
    48             cout << " " << ch3[i];
    49         cout << endl;
    50     }
    51     return 0;
    52 }
    300A
     1 #include <iostream>
     2 using namespace std;
     3 //
     4 int ch[200010];
     5 
     6 int main()
     7 {
     8     int n, t, c;
     9     cin >> n >> t >> c;
    10     for(int i = 0; i < n; i++)
    11         cin >> ch[i];
    12     int i = 0, cou = 0, ans = 0;
    13     while(i < n)
    14     {
    15         while(ch[i] <= t && i < n && cou < c)
    16         {
    17             cou++;
    18             i++;
    19         }
    20         if(cou == c)
    21         {
    22             cou--;
    23             ans++;
    24         }
    25         else
    26         {
    27             i++;
    28             cou = 0;
    29         }
    30     }
    31     cout << ans <<endl;
    32     return 0;
    33 }
    427B

    Greedy

     1 /*
     2 首先根据n^2的思路,我们用出现次数最多的数字来生成这个数列,
     3 即用它尽量构造长度越长的连续子数列,这样一定是最优的,因为
     4 这样一个数字若在中间可以同时影响其前后两个数字,举个例子:
     5 234这三个数字可以得到2个ai<ai+1的组数,而若不连续,2356,
     6 需要4个数才可以得到。根据这个构造思路我们还可以得到最后
     7 如果有剩下的数字那必然是出现次数最多的那个,假设现在出
     8 现次数最多的数字为a,a出现了cnt次,满足ai<ai+1的组数
     9 为ans=n-cnt。现在再加一个数字b进去,若a==b则按照最
    10 优构造思路将其插到连续的a里,这样组数不变相当于
    11 ans = (n + 1) - (cnt + 1) = n - cnt,若a!=b则
    12 必然可以拿出来一个a和b组成一组,
    13 即(n + 1) - cnt = n - cnt + 1 = ans + 1,
    14 根据这样的归纳可以证得结论的正确性
    15 
    16 #include <cstdio>
    17 #include <algorithm>
    18 using namespace std;
    19 int cnt[1005], n, tmp, ma;
    20 
    21 int main()
    22 {
    23     scanf("%d", &n);
    24     for(int i = 0; i < n; i++)
    25     {
    26         scanf("%d", &tmp);
    27         ma = max(ma, ++ cnt[tmp]);
    28     }
    29     printf("%d
    ", n - ma);
    30 }
    31 */
    32 
    33 #include <stdio.h>
    34 #include <queue>
    35 #include <vector>
    36 using namespace std;
    37 
    38 int main()
    39 {
    40     int n, a, b;
    41     priority_queue<int, vector<int>, greater<int> > q1;
    42     priority_queue<int, vector<int>, greater<int> > q2;
    43     scanf("%d", &n);
    44     for(int i = 0; i < n; i++)
    45     {
    46         scanf("%d", &a);
    47         q1.push(a);
    48     }
    49     int ans = 0;
    50     while(q1.size() || q2.size())
    51     {
    52         if(q1.size())
    53         {
    54             a = q1.top();
    55             q1.pop();
    56         }
    57         while(q1.size())
    58         {
    59             b = q1.top();
    60             q1.pop();
    61             if(b > a)
    62             {
    63                 ans++;
    64                 a = b;
    65             }
    66             else q2.push(b);
    67         }
    68         if(q2.size())
    69         {
    70             a = q2.top();
    71             q2.pop();
    72         }
    73         while(q2.size())
    74         {
    75             b = q2.top();
    76             q2.pop();
    77             if(b>a)
    78             {
    79                 ans++;
    80                 a = b;
    81             }
    82             else q1.push(b);
    83         }
    84     }
    85     printf("%d
    ", ans);
    86     return 0;
    87 }
    651B

    Constructive  Algorithms

     1 #include <iostream>
     2 using namespace std;
     3 
     4 long long ch[502][502];//多个数据相加
     5 
     6 int main()
     7 {
     8     int n;
     9     cin >> n;
    10     if(n == 1)
    11     {//特殊情况,其实感觉这里填什么正数都可以啊
    12         cin >> n;
    13         cout << "1" <<endl;
    14     }
    15     else
    16     {
    17         bool flag = false, now = true;
    18         int x,y;
    19         for(int i = 0; i < n; i++)
    20             for(int k = 0; k < n; k++)
    21             {
    22                 cin >> ch[i][k];
    23                 if(ch[i][k] == 0)
    24                 {
    25                     x = i;
    26                     y = k;
    27                 }
    28             }
    29         if(x == n-y-1 || x == y) flag = true;//在对角线上
    30         long long sum = 0;
    31         if(!flag)
    32         {
    33             for(int i = 0; i < n; i++)
    34                 sum += ch[i][i];
    35         }
    36         else
    37         {
    38             if(x == 0)
    39                 for(int i = 0; i < n; i++)
    40                     sum += ch[1][i];
    41             else
    42                 for(int i = 0; i < n; i++)
    43                     sum += ch[0][i];
    44         }
    45 
    46         long long sum1 = 0;
    47         for(int i = 0; i < n; i++)
    48             sum1 += ch[x][i];
    49         ch[x][y] = sum - sum1;
    50         //··············检查
    51 
    52         for(int i = 0; i < n; i++)
    53         {
    54             sum1 = 0;
    55             for(int k = 0; k < n; k++)
    56                 sum1 += ch[i][k];
    57             if(sum1 != sum)
    58             {
    59                 now = false;
    60             }
    61         }
    62 
    63         for(int i = 0; i < n; i++)
    64         {
    65             sum1 = 0;
    66             for(int k = 0; k < n; k++)
    67                 sum1 += ch[k][i];
    68             if(sum1 != sum)
    69             {
    70                 now = false;
    71             }
    72         }
    73         sum1 = 0;
    74         for(int i = 0; i < n; i++)
    75             sum1 += ch[i][i];
    76             if(sum1 != sum)
    77             {
    78                 now = false;
    79             }
    80         sum1 = 0;
    81         for(int i = 0; i < n; i++)
    82             sum1 += ch[i][n-i-1];
    83             if(sum1 != sum)
    84             {
    85                 now = false;
    86             }
    87         if(now && ch[x][y] > 0)
    88             cout << ch[x][y];
    89         else cout << "-1
    ";
    90     }
    91 
    92     return 0;
    93 }
    711B
     

    implementation

     1 #include <iostream>//没读懂题ac系列0.0  找到后面最小的一个交换
     2 using namespace std;
     3 
     4 int ch[3009],sh[3009][2];
     5 
     6 int main()
     7 {
     8     int n;
     9     cin >> n;
    10     for(int i =0; i < n; i++)
    11         cin >> ch[i];
    12     int cnt = 0, mid;
    13     for(int i = 0; i < n; i++)
    14     {
    15         int now = i;
    16         for(int k = i+1; k < n; k++)
    17         {
    18             if(ch[now]>ch[k])
    19             {
    20                 now = k;
    21             }
    22         }
    23         if(now!=i)
    24         {
    25             sh[cnt][0] = i;
    26             sh[cnt][1] = now;
    27             mid = ch[i];
    28             ch[i] = ch[now];
    29             ch[now] = mid;
    30             cnt++;
    31         }
    32     }
    33     cout << cnt <<endl;
    34     for(int i = 0; i < cnt; i++)
    35         cout << sh[i][0] << " " <<sh[i][1] <<endl;
    36     return 0;
    37 }
    489A
     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     long long k;
     7     int n,ch[100010];
     8     cin >> n >> k;
     9     for(int i = 0; i < n; i++)
    10         cin >> ch[i];
    11     long long num = 0;
    12     long long i;
    13     for(i = 1; i <= n; i++)
    14     {
    15         num+=i;
    16         if(num == k)
    17         {
    18             cout << ch[i-1]<<endl;
    19             return 0;
    20         }
    21         else if(num > k)
    22             break;
    23     }
    24     cout << ch[k-(num-i)-1] << endl;
    25     return 0;
    26 }
    670B

    Graph

     1 #include <iostream>
     2 #include <string.h>
     3 #include <vector>
     4 #include <queue>
     5 #define MAX 100010
     6 #define INF 9223372036854775800//因为是long long,所以用0x3f3f3f3f太小了
     7 using namespace std;
     8 
     9 int n,m;
    10 
    11 struct edge{
    12     int to, cost;
    13     edge(){}
    14     edge(int to, int cost) : to(to), cost(cost){}
    15 };
    16 
    17 vector <edge> ch[MAX];
    18 typedef pair<long long, int> P;//length,point
    19 long long d[MAX];//2*10e5 * 10e5 会超出int
    20 int road[MAX];
    21 int pre[MAX];
    22 
    23 
    24 void dijkstra(){
    25     priority_queue<P, vector<P>, greater<P> > que;
    26     for(int i = 0; i <=n; i++)
    27         d[i] = INF;
    28     d[1] = 0;
    29     que.push(P(0,1));
    30 
    31     while(que.size())
    32     {
    33         if(que.empty()) break;
    34         P p = que.top(); que.pop();
    35         int k = p.second;
    36         if(d[k] < p.first)
    37             continue;
    38         for(int i = 0; i < ch[k].size(); i++)
    39         {
    40             edge e = ch[k][i];
    41             if(d[e.to] > d[k] + e.cost)
    42             {
    43                 d[e.to] = d[k] + e.cost;
    44                 que.push(P(d[e.to],e.to));
    45                 pre[e.to] = k;
    46             }
    47         }
    48     }
    49 }
    50 
    51 
    52 int main()
    53 {
    54     int a,b,c;
    55     cin >> n >> m;
    56     for(int i = 0; i < m; i++)
    57     {
    58         cin >> a >> b >> c;
    59         ch[a].push_back(edge(b,c));
    60         ch[b].push_back(edge(a,c));
    61     }
    62     dijkstra();
    63     if(d[n] == INF)
    64     {
    65         cout<<"-1
    ";
    66         return 0;
    67     }
    68     int now = n, cou = 0;
    69     while(now != 1)
    70     {
    71         road[cou++] = now;
    72         now = pre[now];
    73     }
    74     road[cou++] = 1;
    75     for(int i = cou-1; i >= 0; i--)
    76         cout<< road[i]<<" ";
    77     return 0;
    78 }
    20C

    Sorting

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int n,ch[100010];
     8     cin >> n;
     9     for(int i = 0; i < n; i++)
    10         cin >>ch[i];
    11     sort(ch,ch+n);
    12     int ans = 0;
    13     for(int i = 0; i < n; i++)
    14     {
    15         if(ch[i] > ans)
    16             ans++;
    17     }
    18     cout << ans+1 <<endl;
    19     return 0;
    20 }
    21 /*在非递减序列中,求不能连续到达的最小的数
    22 如果数组元素的值比下标大,那么数组可以减小
    23 
    24 
    25 */
    682B
  • 相关阅读:
    Tips:数据的单位
    PHP面向对象三大特性③
    PHP面向对象三大特性②
    PHP面向对象三大特性①
    PHP-初识面向对象
    C# 基础·算法篇
    C# 基础·常见面试
    C# 特殊处理使用方法
    C# 第三方组件使用
    JS 插件使用
  • 原文地址:https://www.cnblogs.com/tony-/p/6718448.html
Copyright © 2020-2023  润新知