URAL 2026 C - Dean and Schedule
2015-08-02 10:56
337 查看
/*PROBLEM C : DEAN AND SCHEDULE "UNSOLVED" */ #include "cstdio" #include "cstring" #include "cctype" #include "algorithm" using namespace std; #define Inc(i, a, b) for(int i = a; i < b; i++) #define Dec(i, a, b) for(int i = a; i > b; i--) #define Mem(a) memset(a, 0, sizeof(a)) #define Pii pair<int, int> #define Cin scanf #define Put printf #define CIN(a) scanf("%d", &a) #define CII(a, b) scanf("%d%d", &a, &b) #define CIS(a) scanf("%s", a) #define PUT(a) printf("%d\n", a) #define PII(a, b) printf("%d %d\n", a, b) #define PUS(a) printf("%s\n", a) #define ll long long #define maxn 100005 char st[maxn]; int k, len; int is[27]; void Update() { Inc(i, 0, len) if(st[i] == '?') st[i] = (i & 1 ? 'a' : 'z'); } int main() { CIS(st), CIN(k); len = strlen(st); if(len < k) { PUT(-1); return 0; } Mem(is); bool flag = 1; int t0 = 0; int odd = 0, even = 0; Inc(i, 0, len) { if(st[i] == '?') { flag = 0, t0++; if(i & 1) even++; else odd++; } else is[st[i] - 'a'] = 1; } int t1 = 0; Inc(i, 0, 26) t1 += is[i]; if(flag) { if(t1 >= k) PUS(st); else PUT(-1); return 0; } if(t0 + t1 < k) { PUT(-1); return 0; } if(t1 >= k) { Update(); PUS(st); return 0; } int al = 0, ar = 25; if(!is[0] && even) { Inc(i, 0, len) if((i & 1) && st[i] == '?') { is[0] = 1, even--; st[i] = 'a', t1++; break; } } if(!is[25] && odd) { Inc(i, 0, len) if((i % 2 == 0) && st[i] == '?') { is[25] = 1, odd--; st[i] = 'z', t1++; break; } } int so = 0, se = 1; while(t1 < k) { Inc(i, so, len) if((i % 2 == 0) && st[i] == '?') { so = i; break; } Inc(i, se, len) if((i & 1) && st[i] == '?') { se = i; break; } Inc(i, al, ar + 1) if(!is[i]) { al = i; break; } Dec(i, ar, al - 1) if(!is[i]) { ar = i; break; } if(odd == 0) { Inc(i, se, len) { if(st[i] == '?') { if(t1 < k) { st[i] = 'a' + al; is[al] = 1, t1++; Inc(i, al, ar + 1) if(!is[i]) { al = i; break;} } else st[i] = 'a'; } } break; } else if(even == 0) { Inc(i, so, len) { if(st[i] == '?') { if(t1 < k) { st[i] = 'a' + ar; is[ar] = 1, t1++; Dec(i, ar, al - 1) if(!is[i]) { ar = i; break;} } else st[i] = 'z'; } } break; } if(25 - al < ar) { st[so] = 'a' + ar, odd--; is[ar] = 1, t1++; } else { st[se] = 'a' + al, even--; is[al] = 1, t1++; } } Update(); PUS(st); }
相关文章推荐
- hihoCoder 1062 最近公共祖先·一
- Tickeys - Liunx 给键盘配上音效的软件
- IOS Block详解
- iOS App上架AppStore 会遇到的坑
- objective-c 运算符优先级排序
- [leetcode] 242.Valid Anagram
- 每一个优秀的人,都有一段沉默的时光,是那一段时光,不抱怨不诉苦,最后渡过了这段感动自己的日子
- Java之反射机制【入门版(2)】
- Selenium2学习-025-WebUI自动化实战实例-023-页面快照截图应用之一 -- 常规截图(全页面)
- VB.net工程的引用修改问题
- mysql 的分库分表操作
- HDU 1232 畅通工程 并查集
- 用MVC结构写web小程序时出现“ Cannot forward after response has been committed”的错误
- 背单词App开发日记5(上)
- Java程序设计之正则表达式
- PROBLEM_B: URAL 2025 B - Line Fighting
- memory currentMemory memballooon
- JAVA流程控制语句
- iOS Quartz2D - 矩阵操作
- 九度oj 1109