Untitled

 avatar
unknown
c_cpp
5 months ago
1.7 kB
3
Indexable
#include <stdio.h>
#include <string.h>

char s[10010], Signal[10010];

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;
}

int main() {
    int t;
	scanf("%d\n", &t);
	for (int i = 0; i < t; i++) {
		fgets(s, 100010, stdin);
		int len = strlen(s);
		s[len-1] = '\0';

		int N = 1, M = 2;
		int pos = 0;
		if(strncmp(s, "for", 3) == 0){
			pos = strcspn(s, "=") + 1;
			int num = 0;
			for (; pos < len; pos++) {
				if (s[pos] == ';') {
					pos++;
					break;
				}
				num = num * 10 + s[pos] - '0';
			}
			N = num;

			num = 0;
			pos = strcspn(s, "<") + 2;
			for (; pos < len; pos++) {
				if (s[pos] == ';') {
					pos++;
					break;
				}
				num = num * 10 + s[pos] - '0';
			}
			M = num;
		}
		char *print = strtok(s, "\"");
		print = strtok(NULL, "\"");

		char *arg = print;
		arg = strtok(NULL, "\"");
		int Signal_len = 0;
		if(arg && strcmp(arg, ");") == 0){
			strcpy(Signal, print);
			Signal_len = strlen(Signal);
		}
		else if(arg){
			while(*print){
				if(*print == '%'){
					print++;
					arg += 2;
					if(*print == 'd'){
						/* 
						TODO
						
						*/
					}
					else if(*print == 'c'){
						arg++;
						Signal[Signal_len++] = *arg;
						arg += 2;
					}
					else{ 
						/* 
						TODO
						
						*/
					}
				}
				else Signal[Signal_len++] = *print;
				print++;
			}
		}
		// for (int j = N; j < M; j++)
		// 	printf("%s", Signal);
		int ans = 0;
		for (int j = N; j < M; j++)
			ans = Gen(ans, Signal);
		printf("%d\n", ans);
		memset(Signal, 0, Signal_len);
	}
}
Editor is loading...
Leave a Comment