hihocoder 1143
#include <cstdio>
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int A[2][2];
int B[2][2];
const int mod = 19999997;
int mul(int a[][2],int b[][2]){
int C[2][2] = {0};
for(int i = 0;i < 2;i++){
for(int j = 0;j < 2;j++){
for(int k = 0;k < 2;k++){
C[i][j] = ( C[i][j] + (long long )a[i][k] * b[k][j])%mod;
}
}
}
for(int i = 0 ;i < 2;i++){
for(int j = 0;j < 2;j++){
a[i][j] = C[i][j];
}
}
}
int fun(int n){
B[0][0] = 1;B[0][1] = 0;
B[1][0] = 0;B[1][1] = 1;
while(n > 0){
if(n&1){
mul(B,A);
}
mul(A,A);
n >>= 1;
}
return B[0][0];
}
int main(){
int n;
A[0][0] = 1;A[0][1] = 1;
A[1][0] = 1;A[1][1] = 0;
cin >> n;
cout << fun(n) << endl;
return 0;
}
hihocoder 1051
#include <cstdio>
#include <iostream>
using namespace std;
int a[105];
int main(){
int t;
cin >> t;
while(t--){
int n,k;
cin >> n>> k;
for(int i = 1;i <= n;i++){
scanf("%d",&a[i]);
}
a[0] = 0;
a[n+1] = 101;
int l = 1;
int r = 1;
int ma = 0;
while(l <= r){
while(r < l + k && r <= n) r++;
if(a[r] - a[l-1]-1 > ma){
ma = a[r] - a[l-1] - 1;
}
l++;
}
cout << ma << endl;
}
return 0;
}
如果补交的话那么补交的是连续的一定是最好的。所以只要枚举下连续区间就行了!
hihocoder 1049
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char pre[30];
char mid[30];
char ans[30];
void fun(int pl,int pr,int ml,int mr,int loc){
int i;
if(pr < pl) return ;
if(mr < ml) return ;
for(i = ml;i < mr;i++){
if(mid[i] == pre[pl]){
ans[loc] = mid[i];
break;
}
}
int lenl = i - ml;
int lenr = mr - i-1;
if(lenl > 0)
fun(pl+1,pl+lenl+1,ml,i,loc-lenr-1);
if(lenr > 0)
fun(pl+lenl+1,pr,i+1,mr,loc-1);
}
int main(){
scanf("%s%s",pre,mid);
int len = strlen(pre);
fun(0,len,0,len,len-1);
printf("%s\n",ans);
return 0;
}
1066
#include <cstdio>
#include <string>
#include <map>
#include <iostream>
using namespace std;
int n;
map<string,int> ma;
int cnt = 1;
int f[200005];
int getfa(int x){
return f[x] == x ? x : f[x] = getfa(f[x]);
}
int main(){
int n;
cin >> n;
cnt = 1;
for(int i = 1;i <= 2*n;i++){
f[i] = i;
}
for(int i = 0;i < n;i++){
int x;
string a,b;
cin >> x >> a >> b;
if(ma[a] == 0){
ma[a] = cnt++;
}
if(ma[b] == 0){
ma[b] = cnt++;
}
int fa = getfa(ma[a]);
int fb = getfa(ma[b]);
if(x == 0){
f[fa] = fb;
}
else{
if(fa == fb){
printf("yes\n");
}
else{
printf("no\n");
}
}
}
return 0;
}