Advertisement
jw910731

TIOJ-1118

Oct 29th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #ifdef TEST
  3.     #define debug(...) printf(__VA_ARGS__)
  4. #else
  5.     #define debug(...) (void)0
  6. #endif
  7. #define EB emplace_back
  8. #define MP make_pair
  9. #define ST first
  10. #define ND second
  11. using namespace std;
  12. using ll = long long;
  13. using llu = long long unsigned;
  14. using pii = pair<int,int>;
  15. /************************/
  16. #define MX 100
  17. int dp[MX+5][MX+5];
  18. int proccess(char *s1, int l1, char *s2, int l2){
  19.     // init stage
  20.     memset(dp, 0x00, sizeof(dp));
  21.     //init start point state
  22.     for(int i = 0 ; i <= l1 ; ++i)
  23.         dp[i][0] = -3*i;
  24.     for(int i = 0 ; i <= l2 ; ++i)
  25.         dp[0][i] = -3*i;
  26.     // proccess stage
  27.     for(int i = 0 ; i < l1 ; ++i){
  28.         for(int j = 0 ; j < l2 ; ++j){
  29.             if(s1[i] == s2[j]){
  30.                 // if char equal => +1
  31.                 dp[i+1][j+1] = dp[i][j]+10;
  32.             }
  33.             else{
  34.                 /*
  35.                     choice 1 => concat both char to the prev state(eg. (a,b) -> (aa,bb))
  36.                     choice 2 => concat char to only one side, the other one is space (eg. (a,b) -> (a*, bb)/ (aa/b*))
  37.                 */
  38.                 dp[i+1][j+1] = max(dp[i][j]-5, max(dp[i][j+1]-3, dp[i+1][j]-3));
  39.             }
  40.            
  41.         }
  42.     }
  43.     return dp[l1][l2];
  44. }
  45. int main(){
  46.     char s1[MX+5], s2[MX+5];
  47.     int len1, len2;
  48.     while(scanf("%s", s1) != EOF){
  49.         scanf("%s", s2);
  50.         len1 = strlen(s1);
  51.         len2 = strlen(s2);
  52.         int ret = proccess(s1, len1, s2, len2); // return 10x score
  53.         /*debug("best score: %d\n", ret);
  54.         for(int i = 0 ; i <= len1 ; ++i){
  55.             for(int j = 0 ; j <= len2 ; ++j){
  56.                 debug("%4d ", dp[i][j]);
  57.             }
  58.             debug("\n");
  59.         }*/
  60.         double ans = double(ret) / len1 * double(10);
  61.         printf("%.2lf%%\n", ans);
  62.     }
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement