14323 - PrinPriPrin (version 2)   

Description

You never believed in aliens until one day, while exploring a building rumored to have UFO sightings to win a bet with your friend. During a phone call with your friend, the signal became increasingly distorted. Suddenly, you lost consciousness. When you opened your eyes, three aliens with mechanical arms appeared before you in a strange space, with your limbs restrained.

Your friend, discovering your disappearance, uses Turbo Granny(高速婆婆)time-travel ability to reach you. To pinpoint your location, he sends signals that you need to respond to. 

 

You will receive T signals S. You need to return the execution result of each line to your friend.

The signals will only appear in the following formats:

1. printf("<string>");
2.
 printf("<string>", '<char>' / <integer>, '<char>' / <integer>, ...);
3.
 for(int i=N; i < M; i++) printf(...);

(The printf format in the 3rd case follows the same pattern as cases 1 and 2.)

Please process your string using the Gen function and output the result.
(You can modify the Gen function as long as you ensure the output result is correct.)

#include <stdio.h>
#include <string.h>

int Gen(int init, char *str){
    int mul = 37, mod = 1e9 + 7;
    long long ret = init, len = strlen(str);

    for (int i=0; i < len; i++){
        ret *= mul;
        ret += str[i];
        ret %= mod;
    }

    return ret;
}

Input

The first line contains an integer T, representing the number of signals.

The following T lines each contain a string S, representing the signal to process in the i-th round.

Each signal Si is guaranteed to:

  • Not contain backslashes ( \ ) or single quotes ( ' )
  • ( % ) only appears in %c and %d formats
  • Not contain double quotes ( " ) inside printf strings

Constraints

  • 1 ≤ T ≤ 100
  • 1 ≤ |S | ≤ 104
  • 0 ≤ |N - M | ≤ 500
  • 0 ≤ input integer ≤ 109

Subtasks

  • Testcases 1 ~ 4: printf appears in the input
  • Testcases 5 ~ 6: printf, for-loop appear in the input
  • Testcases 7 ~ 8: printf, for-loop%c appear in the input
  • Testcases 9 ~ 10: No additional restrictions

Output

Output T lines, each containing a signal Safter being processed by the Gen function, representing the signal to process in the i-th round.

 

Please remember to print "\n" at the end.

Hint

You can solve this problem using the fgets function and some functions from the string.h library.

  1. Use fgets(). (https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fgets-fgetws?view=msvc-170)
  2. Use strtok(). (https://cplusplus.com/reference/cstring/strtok/)

 

If you are not sure how to use Gen, please refer to the following.

If the input is "printf(...);" , you can process it with the following code.

int main(){
 
    // your code
 
    int ans 0;
    ans = Gen(ans, <your string>);
    printf("%d\n", ans);
 
    return 0;
}

 

If the input is "for(int i=N; i < M; i++) printf(...);" , you can process it with the following code.

int main(){
 
    // your code
 

    int ans 0;

    for(int i=N; i < M; i++){

        ans = Gen(ans, <your string>);
    }
 
    printf("%d\n", ans);
 
    return 0;
}
 
For example, if the input is "for(int i=10; i < 14; i++) printf("I2P1 is very %d%c for me.", 1, 'z');"
You should use the second one, and 
N should be 10, M should be 14, and <your string> should be "I2P1 is very 1z for me."

Sample Input  Download

Sample Output  Download

Tags




Discuss