【vjudge训练记录】10月个人训练赛5
训练情况
赛后反思
这场难度蛮奇怪的,赛后一看前四道是某场ARC的题(?),队长塞了什么奇怪难度的题(?)。
E题
字符串哈希,好久没复习过了,哈希取一个质数底数 base 和模数 mod,每次先乘 base + 当前位再取模即可,最后unique去重。
简单一点就全部的 string 扔到 set 里面,直接输出 size。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e4 + 3;
const int base = 148223;
const int mod = 1541312749;
int n;
int s[N],tot;
signed main(){
cin>>n;
for(int i = 1;i<=n;i++){
int temp = 0;
string ss;
cin>>ss;
for(int j = 0;j<ss.length();j++){
temp = (temp * base + ss[j] - 'a' + 1) % mod;
}
s[++tot] = temp;
//cout<<temp<<endl;
}
// for(int i = 1;i<=tot;i++){
// cout<<s[i]<<endl;
// }
sort(s + 1,s + 1 + tot);
cout<<unique(s + 1,s + 1 + tot) - s - 1<<endl;
return 0;
}
G题
少见的交互题,一般直接用 cin 和 cout 会顺带刷新缓冲区,猜数有一个明显的二分单调性,大了往小的找,小了往大的找即可。
#include <cstdio>
#include <iostream>
int main() {
for (int l = 1, r = 1000000000, mid = (l + r) >> 1, res; l <= r; mid = (l + r) >> 1) {
std::cout << mid << std::endl;
std::cin >> res;
if (res == 0) {
return 0;
} else if (res == -1) {
l = mid + 1;
} else if (res == 1) {
r = mid - 1;
}
}
return 0;
}