Skip to main content

Posts

Showing posts from February, 2017

BORW - Black or White

Problem Link #include <iostream> #include <cstring> using namespace std; typedef long int li; const int size = 201; int n; li arr[size]; int dp[size][size][size]; int main() {     while(true)     {         cin >> n;         if(n == -1)             break;         for(int i = 1; i <= n; i++)             cin >> arr[i];         memset(dp, 0, sizeof(dp));         for(int i = 1; i <= n; i++)         {             for(int lb = i + 1; lb <= n + 1; lb++)             {                 for(int lw = i + 1; lw <= n + 1; lw++)                 {                     dp[i][lb][lw] = dp[i - 1][lb][lw] + 1;                     if(lb > n || arr[i] < arr[lb])                     {                         dp[i][lb][lw] = min(dp[i][lb][lw], dp[i - 1][i][lw]);                     }                     if(lw > n || arr[i] > arr[lw])                     {                  

BADXOR

BADXOR - Bad XOR #include <iostream> #include <cstring> #define REP(i, n) for(int i = 0; i < n; i++) #define REP1(i, n) for(int i = 1; i <= n; i++) using namespace std; typedef long long int ll; const int maxLimit = 100000007; ll dp[1005][1024]; //dp[i][j] = number of ways of making value j with first i elements int main() {     int t, a, b;     int arr1[1001];     bool arr2[1025];     cin >> t;     REP1(k, t)     {         memset(dp, 0, sizeof(dp));         memset(arr2, false, sizeof(arr2));         cin >> a >> b;         REP(i, a)         {             cin >> arr1[i];         }         REP(i, b)         {             int temp;             cin >> temp;             arr2[temp] = true;         }         dp[0][0] = 1;         REP1(i, a)         {             REP(j, 1024)             {                 dp[i][j] = dp[i - 1][j] + dp[i - 1][j ^ ar

ANARC05H

ANARC05H - Chop Ahoy! Revisited! #include <iostream> #include <stdio.h> #include <cstring> using namespace std; char str[26]; int len, sum; int solve(int pos, int prevSum) {     if(pos == len)         return 1;     int c = 0;     for(int i = pos, sum = 0; i < len; i++)     {         sum += str[i] - '0';         if(sum >= prevSum)         {             c += solve(i + 1, sum);         }     }     return c; } int main() {     int k = 1;     while(true)     {         scanf("%s", str);         if(!strcmp(str, "bye"))             break;         len = strlen(str);         cout << k << ". ";         cout << solve(0, 0) << endl;         k++;     }     return 0; }

GCD2

GCD2 - GCD2 #include <iostream> #include <string> using namespace std; long long int gcd(long long int a, long long int b) {     if(a == 0)         return b;     return gcd(b % a, a); } long long int reduceNumber(long long int a, string s) {     long long  int r = 0;     for(int i = 0; i < s.size(); i++)     {         r = r * 10 + (s[i] - '0');         r = r % a;     }     return r; } int main() {     int n;     cin >> n;     long long int a, b;     string s;     while(n--)     {         cin >> a;         cin >> s;         if(!a)         {             cout << s << endl;             continue;         }         b = reduceNumber(a, s);         cout << gcd(a, b) << endl;     }     return 0; }

PERMUT2

PERMUT2 - Ambiguous Permutations #include <iostream> #define REP(i, n) for(int i = 0; i < n; i++) using namespace std; const int maxSize = 100001; int arr[maxSize]; int a[maxSize]; int main() {     int n, pos;     bool flag;     while(true)     {         cin >> n;         if(n == 0)             break;         pos = 1;         flag = true;         REP(i, n)         {             cin >> arr[i];             a[arr[i] - 1] = pos;             pos++;         }         REP(i, n)         {             if(a[i] != arr[i])             {                 flag = false;                 break;             }         }         if(!flag)         {             cout << "not ambiguous\n";         }         else         {             cout << "ambiguous\n";         }     }     return 0; }