zoukankan      html  css  js  c++  java
  • wenbao与cf

    选择一个区间反转使得1最多

    http://codeforces.com/contest/327/problem/A

    弱鸡代码

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int sum[120], sum2[120], a[120], b[120];
     4 int main(){
     5     int n, ma = -1;
     6     cin>>n;
     7     for(int i = 1; i <= n; i++){
     8         cin>>a[i];
     9         sum[i] = sum[i-1] + a[i];
    10         b[i] = 1 - a[i];
    11         sum2[i] = sum2[i-1] + b[i];
    12     }
    13     for(int i = 1; i <= n; i++){
    14         for(int j = i; j <=n ; j++){
    15             ma = max(sum[i-1] + sum[n] - sum[j] + sum2[j] - sum2[i-1], ma);
    16         }
    17     }
    18     cout<<ma<<endl;
    19 }

    大神代码

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int n,l=0,k=0,s=0,i,a;
     6     cin>>n;
     7     for(i=1;i<=n;i++)
     8     {
     9         cin>>a;if(a==1) {l++;if(s>0) s--;}else s++; if(s>k) k=s;
    10     }
    11     if(k==0) {cout<<l-1;return 0;}
    12     cout<<l+k;
    13 }

    思路很重要,其实就是找最长的0.。。。。。。。

    @找规律题

      啦啦啦啦啦~~~从样例里面寻找到新大陆!!

      

    1     2 + 2*1 = 4 ----> 2/2 = 1;
    2     2 + 17*2 = 36 ----> 6/3 = 2;
    3     3 + 46*3 = 144 ----> 12/4 = 3;
    4     12 + 97*4 = 400 ----> 20/5 = 4; 
    5     so ----------------->
    6     X = n*(n+1)*(n+1) - (n-1);

      

    http://codeforces.com/contest/716/problem/C

    1 #include <stdio.h>
    2 long long x;
    3 int main(){
    4     scanf("%I64d", &x); 
    5     printf("2
    ", 2);
    6     for(long long i = 2; i <= x; i++) 
    7         printf("%I64d
    ", i*(i+1)*(i+1)-(i-1));
    8 }

    @   http://codeforces.com/problemset/problem/722/C

       逐次删除元素,求区间最大和

     1 #include <iostream>
     2 using namespace std;
     3 #define ll long long
     4 const int maxn = 1e5+10;
     5 ll a[maxn], sum[maxn], b[maxn], l[maxn], r[maxn], vis[maxn], c[maxn], n, ma;
     6 int main(){
     7     std::ios::sync_with_stdio(false);
     8     cin.tie(0), cout.tie(0);
     9     cin>>n;
    10     for(int i = 1; i <= n; i++)    cin>>a[i];
    11     for(int i = 1; i <= n; i++) cin>>b[i];
    12     for(int i = n; i > 1; i--){
    13         if(vis[b[i]-1] && vis[b[i]+1]){
    14             r[l[b[i]-1]] = r[b[i]+1], l[r[b[i]+1]] = l[b[i]-1];
    15             ma =sum[r[b[i]-1]] = sum[l[b[i]-1]] = sum[l[b[i]+1]] = sum[r[b[i]+1]] = sum[l[b[i]-1]] + sum[r[b[i]+1]] +a[b[i]];
    16         }else if(vis[b[i]-1]){
    17             l[b[i]] = l[b[i]-1], r[b[i]] = b[i], r[l[b[i]-1]] = b[i];
    18             ma  = sum[r[b[i]-1]] = sum[l[b[i]-1]] = sum[l[b[i]]] =  sum[r[b[i]]] = sum[l[b[i]-1]] + a[b[i]];
    19         }else if(vis[b[i]+1]){
    20             l[b[i]] = b[i], r[b[i]] = r[b[i]+1], l[r[b[i]+1]] = b[i];
    21             ma = sum[r[b[i]]] =  sum[l[b[i]]] = sum[r[b[i]+1]] = sum[l[b[i]+1]] = sum[r[b[i]+1]] + a[b[i]];
    22         }else{
    23             l[b[i]] = r[b[i]] = b[i];
    24             ma = sum[l[b[i]]] = sum[r[b[i]]] = a[b[i]];
    25         }
    26         c[i] = max(ma, c[i+1]);
    27         vis[b[i]] = 1;
    28     }
    29     for(int i = 2; i <= n; i++) cout<<c[i]<<endl;
    30     cout<<0<<endl;
    31     return 0;
    32 }

    小艾代码:

     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 #define ll long long
     5 ll a[100005],numl[100005],numr[100005],b[100005],l[100005],r[100005],ans[100005];
     6 ll Max(ll a,ll b){
     7     return a>b?a:b;
     8 }
     9 int main(){
    10     int n;
    11     long long sum=0;
    12     scanf("%d",&n);
    13     for(int i=1;i<=n;i++){
    14         scanf("%lld",&a[i]);
    15     }
    16     for(int i=n;i>=1;i--) scanf("%lld",&b[i]);
    17     for(int i=0;i<=n+1;i++){
    18         if(i>0) l[i]=i-1;
    19         if(i<n+1) r[i]=i+1;
    20     }
    21     for(int i=1;i<=n;i++){
    22         int x=b[i];
    23         long long num=numr[l[x]]+numl[r[x]]+a[x];
    24         numl[r[x]]=num;
    25         numr[l[x]]=num;
    26         l[r[x]]=l[x];
    27         r[l[x]]=r[x];
    28         sum=Max(sum,num);
    29         ans[i]=sum;
    30     }
    31     for(int i=n-1;i>=0;i--) printf("%lld
    ",ans[i]);
    32 
    33 }

    X73代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 const int N=1e5+5;
     5 
     6 ll a[N],b[N];
     7 ll sum[N],res[N],mark[N];
     8 set<ll>s;
     9 int pre[N];
    10 int Find(int v)
    11 {
    12     if(pre[v]!=v)
    13         pre[v]=Find(pre[v]);
    14     return pre[v];
    15 }
    16 
    17 int main()
    18 {
    19     int n;
    20     scanf("%d",&n);
    21     for(int i=1;i<=n;i++)pre[i]=i;
    22     for(int i=1;i<=n;i++)scanf("%I64d",a+i);
    23     for(int i=1;i<=n;i++)scanf("%I64d",b+i);
    24     res[n]=0;
    25     mark[b[n]]=1;
    26     sum[b[n]]=a[b[n]];
    27     s.insert(a[b[n]]);
    28     for(int i=n-1;i>=1;i--)
    29     {
    30         res[i]=*s.rbegin();
    31         int t=b[i];
    32         if(mark[t+1]&&!mark[t-1])
    33         {
    34             int u=Find(t+1);
    35             pre[t]=u;
    36             sum[u]+=a[t];
    37             s.insert(sum[u]);
    38         }
    39         else if(!mark[t+1]&&mark[t-1])
    40         {
    41             int u=Find(t-1);
    42             pre[t]=u;
    43             sum[u]+=a[t];
    44             s.insert(sum[u]);
    45         }
    46         else if(mark[t+1]&&mark[t-1])
    47         {
    48             int u=Find(t+1);
    49             int v=Find(t-1);
    50             pre[u]=v;
    51             pre[t]=v;
    52             sum[v]+=sum[u]+a[t];
    53             s.insert(sum[v]);
    54         }
    55         else
    56         {
    57             sum[t]+=a[t];
    58             s.insert(a[t]);
    59         }
    60         mark[t]=1;
    61     }
    62     for(int i=1;i<=n;i++)
    63         printf("%I64d
    ",res[i]);
    64     return 0;
    65 }

    @  http://codeforces.com/contest/723/problem/D

        dfs

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 char a[60][60];
     4 int flag[60][60], n, m, k, num, t = 0, mark, dir[4][2] = {0,1,1,0,0,-1,-1,0};
     5 pair<int ,pair<int,int> > p[2500];
     6 void dfs(int x, int y){
     7     if(x == 0 || x == n-1 || y == 0 || y == m-1) mark = 0;
     8     for(int i = 0; i < 4; i++){
     9         int xx = x + dir[i][0];
    10         int yy = y + dir[i][1];
    11         if(xx >= 0 && xx < n && yy >= 0 && yy < m && a[xx][yy] == '.' && !flag[xx][yy]){
    12             flag[xx][yy] = 1;
    13             num++;
    14             dfs(xx, yy);
    15         }
    16     }
    17 }
    18 void lalala(int x, int y){
    19     a[x][y] = '*';
    20     for(int i = 0; i < 4; i++){
    21         int xx = x + dir[i][0];
    22         int yy = y + dir[i][1];
    23         if(xx >= 0 && xx < n && yy >= 0 && yy < m && a[xx][yy] == '.') lalala(xx,yy);
    24     }
    25 }
    26 int main(){
    27     cin >> n>> m >> k;
    28     for(int  i = 0; i < n; i++) cin>>a[i];
    29     for(int i = 0; i < n; i++){
    30         for(int j = 0; j < m; j++){
    31             if(a[i][j] == '.' && !flag[i][j]){
    32                 flag[i][j] = 1, num = 1, mark = 1, dfs(i,j);
    33                 if(mark) p[t].first = num, p[t].second.first = i, p[t].second.second = j, t++; 
    34             }
    35         }
    36     }
    37     sort(p, p+t);
    38     int sum = 0;
    39     for(int i = 0; i < t-k; i++) sum += p[i].first, lalala(p[i].second.first, p[i].second.second);
    40     cout<<sum<<endl;
    41     for(int i = 0; i < n; i++) cout<<a[i]<<endl;
    42 }

    @  http://codeforces.com/contest/722/problem/D

    想了很久没有思路。。。垃圾

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 map<int, int> m;
     5 priority_queue<int> pq;
     6 int main(){
     7     int n, flag = 0, x;
     8     cin>>n;
     9     for(int i = 0; i < n; i++){
    10         cin>>x;
    11         m[x] = 1;
    12         pq.push(x);
    13     }
    14     while(1){
    15         x = pq.top();
    16         while(x&&m[x]) x/=2;
    17         if(!x) break;
    18         else pq.pop(),pq.push(x), m[x] = 1;
    19     }
    20     while(!pq.empty()){
    21         cout<<pq.top()<<" ";
    22         pq.pop();
    23     }
    24     return 0;
    25 }

    @  http://codeforces.com/contest/721/problem/C

        费用小于等于T游览的城市尽量多

     1 #include <iostream>
     2 #include <vector>
     3 #include <string.h>
     4 using namespace std;
     5 const int maxn = 5005;
     6 int n, m, t;
     7 int node = 0, head[maxn], dp[maxn][maxn], parent[maxn][maxn];
     8 struct Node {
     9     int from, to, next, w;
    10 } Edge[maxn];
    11 void init(){
    12     memset(head, -1, sizeof(head));
    13     for(int i = 0; i <= n; i ++){
    14         for(int j = 0; j <= n; j ++){
    15             dp[i][j] = t+1;
    16         }
    17     }
    18     dp[1][1] = 0;
    19 }
    20 void addedge(int u, int v, int w){
    21     Edge[node].from = u;
    22     Edge[node].to = v;
    23     Edge[node].w = w;
    24     Edge[node].next = head[u];
    25     head[u] = node ++;
    26 }
    27 void print(int pos){
    28     cout << pos <<endl;
    29     int id = n;
    30     vector<int> v;
    31     v.push_back(n);
    32     for(int i = pos; i > 1; i--){
    33         v.push_back(parent[i][id]);
    34         id = parent[i][id];
    35     }
    36     for(int i = v.size() - 1; i >= 0; i--) cout << v[i] <<" ";
    37 }
    38 void solve(){
    39     int v, u, w, pos;
    40     for(int i = 2; i <= n; i++){
    41         for(int j = 0; j < m; j++){
    42             u = Edge[j].from, v = Edge[j].to, w = Edge[j].w;
    43             if(dp[i-1][u] + w < dp[i][v]){
    44                 dp[i][v] = dp[i-1][u] + w;
    45                 parent[i][v] = u;
    46             }
    47         }
    48         if(dp[i][n] <= t) pos = i;
    49     }
    50     print(pos);
    51 }
    52 int main(){
    53     cin >> n >> m >> t;
    54     init();
    55     int u, v, w;
    56     for(int i = 0; i < m; i++) {
    57         cin >> u >> v >> w;
    58         addedge(u, v, w);
    59     }
    60     solve();
    61     return 0;
    62 }
     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 const int maxn = 5005;
     5 int u[maxn], v[maxn], w[maxn], dp[maxn][maxn], parent[maxn][maxn], x[maxn];
     6 int main(){
     7     int n, m, t, pos;
     8     cin >> n >> m >> t;
     9     for(int i = 0; i < m; i ++){
    10         cin >> u[i] >> v[i] >> w[i];
    11     }
    12     memset(dp, 0x3f, sizeof(dp));
    13     dp[1][1] = 0;
    14     for(int i = 2; i <= n; i ++){
    15         for(int j = 0; j < m; j ++){
    16             if(dp[i-1][u[j]] + w[j] < dp[i][v[j]]){
    17                 dp[i][v[j]] = dp[i-1][u[j]] + w[j];
    18                 parent[i][v[j]] = u[j];
    19             }
    20         }
    21         if(dp[i][n] <= t) pos = i;
    22     }
    23     int id = n;
    24     for(int i = pos; i >= 1; i--){
    25         x[i] = id;
    26         id = parent[i][id];
    27     }
    28     cout << pos <<endl;
    29     for(int i = 1; i <= pos; i ++) cout << x[i]<<" ";
    30     return 0;
    31 }

    http://codeforces.com/contest/733/problem/D

      内切球(W的爽啊)

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 const int maxn = 1e5+10;
     5 struct Node{
     6     long long x, y, z, w;
     7 }T[maxn];
     8 long long cmp(Node a, Node b){
     9     if(a.y == b.y && a.z == b.z) return a.x < b.x;
    10     if(a.y == b.y) return a.z < b.z;
    11     return a.y < b.y;
    12 }
    13 int main(){
    14     long long n, mi = -1, a[4], num, num1, num2;
    15     cin >> n;
    16     for(int i = 0; i < n; i++){
    17         cin >> a[0] >> a[1] >> a[2];
    18         sort(a, a+3);
    19         T[i].x = a[0], T[i].y = a[1], T[i].z = a[2], T[i].w = i+1;
    20         if(a[0] > mi){
    21             mi = a[0];
    22             num = i+1;
    23         }
    24     }
    25     sort(T, T+n, cmp);
    26     long long mm = -1;
    27     for(int i = 1; i < n; i++){
    28         if(T[i].y == T[i-1].y && T[i].z == T[i-1].z){
    29             long long t = min(T[i].x+T[i-1].x, T[i].y);
    30             if(t > mm){
    31                 mm = t;
    32                 num1 = T[i].w, num2 = T[i-1].w;
    33             }
    34         }
    35     }
    36     if(mi >= mm) {
    37         cout<<1<<endl<<num<<endl;
    38     }else{
    39         cout<<2<<endl<<num1<<" "<<num2<<endl;
    40     }
    41     return 0;
    42 }

    好屌

    http://codeforces.com/contest/738/problem/A

    1 #include <bits/stdc++.h>
    2 using namespace std;
    3 
    4 int main() {
    5   string s; cin >> s >> s;
    6   cout << regex_replace(s, regex("o(go)+"), "***") << '
    ';
    7   return 0;
    8 }

    http://codeforces.com/contest/749/problem/D

    投票。。。。。。

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <vector>
     4 #include <map>
     5 using namespace std;
     6 const int maxn = 2e5+10;
     7 vector<int> v[maxn];
     8 int vv[maxn], b[maxn];
     9 map<int, int > m;
    10 map<int, int > :: iterator it;
    11 int main(){
    12     int n, q, x, y;
    13     scanf("%d", &n);
    14     for(int i = 0; i < n; i++){
    15         scanf("%d%d", &x, &y);
    16         v[x].push_back(y);
    17         vv[x] = y;
    18     }
    19     m[0] = 0;
    20     for(int i = 1; i <= n; i++){
    21         if(vv[x]){
    22             m[vv[i]] = i;
    23         }
    24     }
    25     scanf("%d", &q);
    26     while(q--){
    27         int x, xx;
    28         scanf("%d", &x);
    29         for(int i = 0; i < x; i++){
    30             scanf("%d", &xx);
    31             b[i] = xx;
    32             if(vv[xx]) m.erase(vv[xx]);
    33         }
    34         it = m.end();
    35         it --;
    36         if(it == m.begin()){
    37             printf("0 0
    ");
    38         }else{
    39             int itt = it->second;
    40             it--;
    41             printf("%d %d
    ", itt, *lower_bound(v[itt].begin(), v[itt].end(), it->first));
    42         }
    43         for(int i = 0; i < x; i++){
    44             if(vv[b[i]]) m[vv[b[i]]] = b[i];
    45         }
    46     }
    47     return 0;
    48 }

    http://codeforces.com/contest/752/problem/C

    圣诞老人送礼物

      上下左右四个点中三个点就可以确定一个点;;fuck

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 map<char, int> m;
     4 int main(){
     5     int n, sum = 1;
     6     string str;
     7     cin >> n >> str;
     8     for(int i = 0; i < n; i++){
     9         m[str[i]] ++;
    10         if((m['L'] > 0&& m['R'] > 0) ||(m['U'] > 0 && m['D'] > 0)){
    11             sum ++;
    12             m['L'] = 0, m['R'] = 0, m['U'] = 0, m['D'] = 0;
    13             m[str[i]] ++;
    14         }
    15     }
    16     printf("%d
    ", sum);
    17     return 0;
    18 }

    大神就是这样出神入化

     1 #include<cstdio>
     2 #include<cstring>
     3 char s[200010];
     4 bool b[10];
     5 int d[1000];
     6 int main()
     7 {
     8     int n,i,ans;
     9     scanf("%d%s",&n,s+1);
    10     ans=0;
    11     d['L'-'A'+1]=0;
    12     d['U'-'A'+1]=1;
    13     d['D'-'A'+1]=2;
    14     d['R'-'A'+1]=3;
    15     for (i=1;i<=n;i++)
    16     {
    17         if (b[3-d[s[i]-'A'+1]])
    18         {
    19             ans++;
    20             b[0]=b[1]=b[2]=b[3]=0;
    21         }
    22         b[d[s[i]-'A'+1]]=1;
    23     }
    24     printf("%d
    ",ans+1);
    25 }

    http://codeforces.com/contest/750/problem/A

    自己太菜。。。。。别人可以一分钟就秒的题硬是做了二十多分钟。。。。垃圾。。。

    自己的代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main(){
     4     int n, m, sum = 0, a = 5;
     5     scanf("%d%d", &n, &m);
     6     m = 240 - m;
     7     if((10+(n-1)*5)*n/2 < m){
     8         printf("%d
    ", n);
     9         return 0;
    10     }
    11     for(int i = 0; ; i++){
    12         if(sum == m){
    13             printf("%d
    ", i);
    14             return 0;
    15         }
    16         if(sum > m){
    17             printf("%d
    ", i-1);
    18             return 0;
    19         }
    20         sum += a;
    21         a+=5;
    22     }
    23     return 0;
    24 }

    大大神代码:

     1 #include <stdio.h>
     2 #include <iostream>
     3 using namespace std;
     4 int main(){
     5     int n, m, num = 0;
     6     scanf("%d %d", &n, &m);
     7     for(int i = 1; i <= n; i++){
     8         if(m+5*i <= 240){
     9             num ++;
    10             m += 5*i;
    11         }
    12     }
    13     printf("%d
    ", num);
    14 }

    模拟。。。什么是模拟,。。,,。,。,按照实际的思路写(当你面对的时候会怎么办)

     http://codeforces.com/contest/750/problem/C

    菜如狗

        cf排名

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 0x3f3f3f3f;
     4 int main(){
     5     int n, a = maxn, b = -maxn, sum = 0, m , t;
     6     scanf("%d", &n);
     7     for(int i = 0; i < n; i++){
     8         scanf("%d %d", &m, &t);
     9         if(t == 1){
    10             a = min(a, sum);
    11         }else{
    12             b = max(b, sum);
    13         }
    14         sum += m;
    15     }
    16     if(a <= b){
    17         puts("Impossible");
    18         return 0;
    19     }
    20     if(b == -maxn){
    21         puts("Infinity");
    22         return 0;
    23     }
    24     printf("%d
    ", 1899 - b + sum);
    25     return 0;
    26 }

    只有不断学习才能进步!

  • 相关阅读:
    unity2D动画和图片切割
    Premiere导入视频之后音频轨没有内容
    .net视频教程代码之《提交注册内容》
    搭建ftp
    Unity PC端发布失败解决办法
    Unity触发器有时失效的原因
    NGUI的UIRoot会移动
    Random类(随机数)
    Devexpress Xtrareport 打印报表
    Devexpress Xtrareports 创建多栏报表
  • 原文地址:https://www.cnblogs.com/wenbao/p/5844951.html
Copyright © 2011-2022 走看看