第五章
ALDS1_4_A Linear Search
#include <iostream>
using namespace std;
int main() {
int S[10005];
int T[505];
int n;
int q;
cin>>n;
for(int i=0;i<n;i++){
cin>>S[i];
}
cin>>q;
for(int i=0;i<q;i++){
cin>>T[i];
}
int count=0;
for(int i=0;i<q;i++){
for(int j=0;j<n;j++){
if(S[j]==T[i]){
count++;
break;
}
}
}
cout<<count<<endl;
return 0;
}
#include <iostream>
using namespace std;
int searchQ(int A[],int n,int key){
int i=0;
A[n] = key;
while(A[i]!=key) i++;
return i!=n;
}
int main() {
int n,A[10000+1],q,key,sum=0;
cin>>n;
for(int i=0;i<n;i++) cin>>A[i];
cin>>q;
for(int i=0;i<q;i++){
cin>>key;
sum+=searchQ(A,n,key);
}
cout<<sum<<endl;
return 0;
}
ALDS1_4_B Binary Search
#include <iostream>
using namespace std;
int BsearchQ(int A[],int n,int key){
int l = 0;
int r = n;
while(l<r){
int mid=(l+r)/2;
if(A[mid]==key){
return 1;
}else if(A[mid]<key){
l=mid+1;
}else {
r=mid;
}
}
return 0;
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
int n,A[100000+5],q,key,sum=0;
cin>>n;
for(int i=0;i<n;i++) cin>>A[i];
cin>>q;
for(int i=0;i<q;i++){
cin>>key;
sum+=BsearchQ(A,n,key);
}
cout<<sum<<endl;
return 0;
}
ALDS1_4_C Dictionary
#include <stdio.h>
#include <string.h>
#define M 1046527
#define NIL (-1)
#define L 14
char H[M][L];
int getChar(char ch){
if(ch=='A') return 1;
if(ch=='C') return 2;
if(ch=='G') return 3;
if(ch=='T') return 4;
else return 0;
}
long long getKey(char str[]){
long long sum=0,p=1;
for(int i=0;i<strlen(str);i++){
sum+=p*(getChar(str[i]));
p*=5;
}
return sum;
}
int h1(int key){
return key%M;
}
int h2(int key){
return 1+(key%(M-1));
}
int find(char str[]){
long long key,h;
key = getKey(str);
for(int i=0;;i++){
h=(h1(key)+i*h2(key))%M;
if(strcmp(H[h],str)==0) return 1;
else if(strlen(H[h])==0) return 0;
}
return 0;
}
int insert(char str[]){
long long key,h;
key = getKey(str);
for(int i=0;;i++){
h=(h1(key)+i*h2(key))%M;
if(strcmp(H[h],str)==0) return 1;
else if(strlen(H[h])==0){
strcpy(H[h],str);
return 0;
}
}
return 0;
}
int main(){
int n,h;
char str[L],com[9];
for(int i=0;i<M;i++) H[i][0]=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s %s",com,str);
if(com[0]=='i'){
insert(str);
}else{
if(find(str)){
printf("yes\n");
}else{
printf("no\n");
}
}
}
return 0;
}
ALDS1_4_D Allocation
#include <iostream>
using namespace std;
#define MAX 100000
int n,k;
long long T[MAX];
int check(long long P){
int i=0;
for(int j=0;j<k;j++){
long long s=0;
while(s+T[i]<=P){
s+=T[i];
i++;
if(i==n)return n;
}
}
return i;
}
int solve(){
long long left = 0;
long long right = 100000*10000;
long long mid;
while(right-left>1){
mid=(left+right)/2;
int v=check(mid);
if(v>=n)right=mid;
else left=mid;
}
return right;
}
int main() {
cin>>n>>k;
for(int i=0;i<n;i++) cin>>T[i];
long long ans=solve();
cout<<ans<<endl;
return 0;
}