c multimap_emacs python c-c c-c i 不好使_a=b=c,a=b==c c语言(10)

电脑杂谈  发布时间:2019-09-26 07:03:00  来源:网络整理

比例简化

 1 //桶排
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int num[50001];
 5 bool vis[50001];
 6 int main()
 7 {
 8     int n , cou = 0 , maxN = 0;
 9     cin >> n;
10     for(int i = 0 ; i < n ; i++)
11     {
12         int a;
13         cin >> a;
14         num[a]++;
15         maxN = maxN < a ? a : maxN;
16     }
17     for(int i = 1 ; i <= maxN ; i++)
18         for(int j = i + 1 ; j <= maxN ; j++)
19             if(num[i] && num[j] && !vis[i + j])
20             {
21                 cou += num[i + j];
22                 vis[i + j] = 1;
23             }
24     cout << cou;
25     return 0;
26 }

珠心算测验

c multimap_emacs python c-c c-c i 不好使_a=b=c,a=b==c c语言

 1 //找规律
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int main()
 5 {
 6     int sum = 0 , N , A , B;
 7     cin >> N >> A >> B;
 8     while(A != 1 && B != 1 && A != N && B != N){
 9         A--;
10         B--;
11         sum += (N - 1) << 2;
12         N -= 2;
13     }
14     if(A == 1)
15         cout << sum + B;
16     else
17         if(B == N)
18             cout << sum + N - 1 + A;
19         else
20             if(A == N)
21                 cout << sum + ((N - 1) << 1) + (N - B + 1);
22             else
23                 cout << sum + (N - 1) * 3 + (N - A + 1);
24      return 0;
25 }

螺旋矩阵

 1 //搜索+DP
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int minN[17][17] , choose[8] , num[17][17] , N , M , R , C , lasAns = 0x3f3f3f3f;
 5 
 6 inline int abs(int a){
 7     return a > 0 ? a : -a;
 8 }
 9 
10 inline int calc(int bef , int now){
11     int sum = 0;
12     for(int i = 0 ; i < R ; i++)
13         sum += abs(num[choose[i]][bef] - num[choose[i]][now]);
14     return sum;
15 }
16 
17 inline int ask(int now){
18     int sum = 0;
19     for(int i = 0 ; i < R - 1 ; i++)
20         sum += abs(num[choose[i]][now] - num[choose[i + 1]][now]);
21     return sum;
22 }
23 
24 inline void DP(){
25     memset(minN , 0x3f , sizeof(minN));
26     for(int i = 1 ; i <= M ; i++){
27         minN[i][1] = ask(i);
28         for(int j = i - 1 ; j ; j--){
29             int t = calc(i , j);
30             for(int k = 2 ; k <= j + 1 && k <= C ; k++)
31                 minN[i][k] = min(minN[i][k] , minN[j][k - 1] + t + minN[i][1]);
32         }
33     }
34     for(int i = C ; i <= M ; i++)
35         lasAns = min(lasAns , minN[i][C]);
36 }
37 
38 void dfs(int dir , int num){
39     if(num == R){
40         DP();
41         return;
42     }
43     if(num + N - dir + 1 < R)
44         return;
45     dfs(dir + 1 , num);
46     choose[num++] = dir;
47     dfs(dir + 1 , num);
48 }
49 
50 int main()
51 {
52     cin >> N >> M >> R >> C;
53     for(int i = 1 ; i <= N ; i++)
54         for(int j = 1 ; j <= M ; j++){
55             cin >> num[i][j];
56         }
57     dfs(1 , 0);
58     cout << lasAns;
59      return 0;
60 }

*子矩阵

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int cou = 1 , n , sum = 0;
 5     cin >> n;
 6     while(n >= cou){
 7         sum += cou * cou;
 8         n -= cou++;
 9     }
10     cout << sum + cou * n;
11     return 0;
12 }

金币

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char bomb[102][102];
 4 int dir[8][2] = {1,0,-1,0,0,1,0,-1,1,1,-1,-1,-1,1,1,-1};
 5 int main()
 6 {
 7     int n , m;
 8     cin >> n >> m;
 9     for(int i = 1 ; i <= n ; i++)
10         for(int j = 1 ; j <= m ; j++)
11             cin >> bomb[i][j];
12     for(int i = 1 ; i <= n ; i++){
13         for(int j = 1 ; j <= m ; j++)
14             if(bomb[i][j] == '*')    cout << '*';
15             else{
16                 int cou = 0;
17                 for(int k = 0 ; k < 8 ; k++)
18                     if(bomb[i + dir[k][0]][j + dir[k][1]] == '*')
19                         cou++;
20                 cout << cou;
21             }
22         cout << endl;
23     }
24      return 0;
25 }

扫雷游戏

 1 //分类+前缀和
 2 #include<bits/stdc++.h>
 3 #define MAXN 100001
 4 #define MOD 10007
 5 using namespace std;
 6 int sum[MAXN][2] , num[MAXN][2] , col[MAXN] , val[MAXN];
 7 
 8 int main()
 9 {
10     ios::sync_with_stdio(0);
11     cin.tie(0);
12     cout.tie(0);
13     int n , m , s = 0;
14     cin >> n >> m;
15     for(int i = 1 ; i <= n ; i++)
16         cin >> val[i];
17      for(int i = 1 ; i <= n ; i++){
18         cin >> col[i];
19         num[col[i]][i & 1]++;
20         sum[col[i]][i & 1] = (sum[col[i]][i & 1] + val[i]) % MOD;
21     }
22     for(int i = 1 ; i <= n ; i++)
23         s += ((num[col[i]][i & 1] - 2) * val[i] + sum[col[i]][i & 1]) % MOD * i % MOD;
24     cout << s % MOD;
25     return 0;
26 }

求和

  1 //贪心+线段树
  2 #include<bits/stdc++.h>
  3 #define mid ((l + r) >> 1)
  4 #define lch (now << 1)
  5 #define rch (now << 1 | 1)
  6 //This code is written by Itst
  7 using namespace std;
  8 
  9 inline int read(){
 10     int a = 0;
 11     bool f = 0;
 12     char c = getchar();
 13     while(c != EOF && !isdigit(c)){
 14         if(c == '-')
 15             f = 1;
 16         c = getchar();
 17     }
 18     while(c != EOF && isdigit(c)){
 19         a = (a << 3) + (a << 1) + (c ^ '0');
 20         c = getchar();
 21     }
 22     return f ? -a : a;
 23 }
 24 
 25 const int MAXN = 100010;
 26 struct node{
 27     int maxN , maxD , mark;
 28 }Tree[MAXN << 2];
 29 int num[MAXN] , S[MAXN] , N , fur;
 30 
 31 inline void pushup(int now){
 32     if(Tree[lch].maxN > Tree[rch].maxN){
 33         Tree[now].maxN = Tree[lch].maxN;
 34         Tree[now].maxD = Tree[lch].maxD;
 35     }
 36     else{
 37         Tree[now].maxN = Tree[rch].maxN;
 38         Tree[now].maxD = Tree[rch].maxD;
 39     }
 40 }
 41 
 42 inline void pushdown(int now){
 43     if(Tree[now].mark){
 44         Tree[lch].mark += Tree[now].mark;
 45         Tree[lch].maxN += Tree[now].mark;
 46         Tree[rch].mark += Tree[now].mark;
 47         Tree[rch].maxN += Tree[now].mark;
 48         Tree[now].mark = 0;
 49     }
 50 }
 51 
 52 void init(int now , int l , int r){
 53     if(l == r){
 54         Tree[now].maxD = l;
 55         Tree[now].maxN = num[l] + (S[l] << 1);
 56     }
 57     else{
 58         init(lch , l , mid);
 59         init(rch , mid + 1 , r);
 60         pushup(now);
 61     }
 62 }
 63 
 64 void change(int now , int l , int r , int tar , int num){
 65     if(l == r){
 66         Tree[now].maxN = num;
 67         return;
 68     }
 69     pushdown(now);
 70     if(mid >= tar)
 71         change(lch , l , mid , tar , num);
 72     else
 73         change(rch , mid + 1 , r , tar , num);
 74     pushup(now);
 75 }
 76 
 77 void add(int now , int l , int r , int L , int R , int mark){
 78     if(l >= L && r <= R){
 79         Tree[now].mark += mark;
 80         Tree[now].maxN += mark;
 81         return;
 82     }
 83     pushdown(now);
 84     if(mid >= L)
 85         add(lch , l , mid , L , R , mark);
 86     if(mid < R)
 87         add(rch , mid + 1 , r , L , R , mark);
 88     pushup(now);
 89 }
 90 
 91 int main(){
 92 #ifdef OJ
 93     freopen("2672.in" , "r" , stdin);
 94     //freopen("2672.out" , "w" , stdout);
 95 #endif
 96     N = read();
 97     for(int i = 1 ; i <= N ; i++)
 98         S[i] = read();
 99     for(int i = 1 ; i <= N ; i++)
100         num[i] = read();
101     init(1 , 1 , N);
102     int ans = 0;
103     for(int i = 1 ; i <= N ; i++){
104         printf("%d\n" , ans += Tree[1].maxN);
105         int t = Tree[1].maxD;
106         for(int j = fur + 1 ; j < t ; j++)
107             change(1 , 1 , N , j , num[j]);
108         if(t > fur){
109             add(1 , 1 , N , t , N , -(S[t] - S[fur]) << 1);
110             fur = t;
111         }
112         change(1 , 1 , N , t , 0);
113     }
114     return 0;
115 }


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-124192-10.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...