zoukankan      html  css  js  c++  java
  • Codeforces Round #666 Div. 2

    contest1397

    A.Juggling Letters

    对每个字母进行计数,看是否能整除n

      #include <iostream>
      #include <algorithm>
      #include <cstdio>
      #include <cmath>
      #include <cstring>
      using namespace std;
      typedef long long ll;
      const ll mod = 1e4;
      int cnt[26] = {};
      int main(){
      	      ll n;
      	      cin >> n;
          while (n--)
          {
    	      int b,d;
    	      cin >> b;
    	      d = b;
    	      string k;
    	      memset(cnt, 0, sizeof(cnt));
    	      while (b--)
    	      {
    		      cin >> k;
    		      for (int i = 0; i < k.length(); i++) {
    		      	      cnt[k[i]-'a']++;
    		      }
    	      }
    	      int flag = 0;
    	      for (int i = 0; i < 26; i++) {
    		      if (cnt[i] % d)flag = 1;
    	      }
    	      if (flag)cout << "NO
    ";
    	      else cout << "YES
    ";
          }
      }
    

    B.Power Sequence

    cost是从大到小再到大的,从1开始依次枚举c,只要cost大于前一个值就break。(打的时候脑子抽了,以为这样复杂度会爆炸,就一直一直再乱写。。。)

      #include <iostream>
      #include <algorithm>
      #include <cstdio>
      #include <cmath>
      #include <cstring>
      using namespace std;
      typedef long long ll;
      const ll mod = 1e5 + 5;
      ll INF = 1e18;
      int dataa[mod] = {};
      int min(int b, int a) { if (a > b)return b; return a; }
      int main(){
          ll n;
          cin >> n;
          for (int i = 0; i < n; ++i) {
    	      scanf("%d", &dataa[i]);
          }
          sort(dataa, dataa + n);
          ll ans =0;
          for (int i = 0; i < n; ++i) {
    	      ans += llabs(dataa[i] - 1);
          }
          ll c = 2;
          while (1)
          {
    	      ll temp = 0;
    	      ll b = 1;
    	      for (int i = 0; i < n; i++) {
    		      temp += llabs(dataa[i] - b);
    		      if (temp > ans)break;//如果temp已经超过ans了就直接break,防止爆long long
    		      b *= c;
    	      }
    	      if (temp > ans)break;
    	      ans = min(ans, temp);
    	      c++;
          }
          cout << ans;
    
      }
    

    C. Multiples of Length

    首先给1到n-1的数每个加上他们自身的n-1倍
    再给1到n的数减去他们自身的n倍(第n个数减去0)
    最后给第n个数减去1乘以他自身

      #include <iostream>
      #include <algorithm>
      #include <cstdio>
      #include <cmath>
      #include <cstring>
      using namespace std;
      typedef long long ll;
      const ll mod = 1e5 + 5;
      ll INF = 1e18;
      int dataa[mod] = {};
      int min(int b, int a) { if (a > b)return b; return a; }
      int main()
      {
          ll n;
          cin >> n;
          for (int i = 0; i < n; ++i) {
    	      scanf("%d", &dataa[i]);
          }
          if (n != 1) {
    	      cout << 1 << ' ' << n - 1 << '
    ';
    	      for (int i = 0; i < n - 1; i++) {
    		      cout << dataa[i] * (n - 1);
    		      cout << ' ';
    	      }
    	      cout << '
    ';
    	      cout << 1 << ' ' << n << '
    ';
    	      for (int i = 0; i < n - 1; i++) {
    		      cout << dataa[i] * n * -1;
    		      cout << ' ';
    	      }
    	      cout << 0;
    	      cout << '
    ';
    	      cout << n << ' ' << n << '
    ';
    	      cout << -1 * dataa[n-1];
          }
          else
          cout << "1 1
    0
    1 1
    0
    1 1
    " << -1 * dataa[0];
      }
    

    D.Stoned Game

    每个人不能选前一次对手选的石堆,那最优情况就是先手选当前局面中最大的石堆。如果有一个石堆比其他所有石堆之和都大,那先手一直选那个石堆即可。如果没有,因为我们每次选的都是当前最大的石堆,每个石堆均匀消耗,判断总石子的奇偶性即可。

      #include <iostream>
      #include <algorithm>
      #include <cstdio>
      #include <cmath>
      #include <string>
      #define lc(i) (2*i+1)
      using namespace std;
      typedef long long ll;
      const ll mod = 1e6 + 1e6+5;
      ll INF = 1e18;
      ll ans = 0;
      int dataa[mod] = {}; 
      int tmpa[mod] = {};
      int min(int b, int a) { if (a > b)return b; return a; }
      int max(int a, int b) { if (a > b)return a; return b;}
      int main(){
          ll n;
          cin >> n;
          while (n--)
          {
    	      ll m;
    	      cin >> m;
    	      for (int i = 0; i < m; i++)scanf("%d", &dataa[i]);
    	      ll sum = 0;
    	      ll mx = 0;
    	      for (int i = 0; i < m; i++) {
    		      sum += dataa[i];
    		      mx = max(dataa[i], mx);
    	      }
    	      if (sum - mx < mx)cout << "T
    ";
    	      else {
    		      if (sum % 2==0)cout << "HL
    ";
    		      else cout << "T
    ";
    	      }
    
          }
    
      }
    K-ON!!
  • 相关阅读:
    安卓组件service
    安卓组件-BroadcastReceiver
    【bug】java.lang.NoSuchMethodError: android.widget.TextView.setBackground
    【转】安卓毛玻璃效果
    INSTALL_FAILED_UPDATE_INCOMPATIBLE
    安卓 异步线程更新Ui
    OC语言-03-OC语言-三大特性
    OC语言-02-OC语言-基础知识
    OC语言-01-面向过程与面向对象思想
    C语言-07-预处理、typedef、static和extern
  • 原文地址:https://www.cnblogs.com/pophirasawa/p/13593966.html
Copyright © 2011-2022 走看看