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

posted @ 2024-11-02 21:57  MNNUACM_2024ZY  阅读(23)  评论(0编辑  收藏  举报