- 张家宁 的博客
DAY8
- @ 2024-7-21 20:22:06
小田的同余
思路
我们反推,可得知,公式如下:
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
long long m,n;
cin>>m;
n=(m+1)/2;
cout<<n;
return 0;
}
小田的奶牛要饿坏啦!!
思路
将没有草吃的天数记录下来,将总天数减去这个,就是结果
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("cow.in","r",stdin);
freopen("cow.out","w",stdout);
int n;
long long t,cnt=0,di=1,bi=0,op=0;
cin>>n>>t;
for(int i=1;i<=n;i++){
long long d,b;
cin>>d>>b;
cnt+=max(d-di-bi,op);
bi=b+max(bi-(d-di),op);
di=d;
//cout<<cnt<<" "<<di<<" "<<bi<<endl;
}
cnt+=max(t+1-di-bi,op);
//cout<<cnt<<endl;
cout<<t-cnt;
return 0;
}
小田喂猫
小田宠物真多
思路
- 先排序(数量)
- 将前缀和与后缀积计算出来,用于将有和没有这么多猫粮区分出来,再计算
- 用二分查找第一个数量小于k的地方
代码
#include<bits/stdc++.h>
using namespace std;
pair<long long,long long> a[100010];
long long as[100010],bs[100010];
int k;
long long fin(int l,int r){
while(l<r){
int mid=(l+r>>1)+1;
//cout << k << endl;
if(a[mid].first<=k){
l=mid;
}else{
r=mid-1;
}
//cout<<l<<" "<<r<<endl;
}
return l;
}
int main(){
freopen("cat.in","r",stdin);
freopen("cat.out","w",stdout);
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].second;
}
for(int i=1;i<=n;i++){
cin>>a[i].first;
}
sort(a+1,a+n+1);
for(int i=n;i>=1;i--){
bs[i]=bs[i+1]+a[i].second;
}
for(int i=1;i<=n;i++){
as[i]=as[i-1]+a[i].first*a[i].second;
}
int q;
cin>>q;
while(q--){
cin>>k;
long long u=fin(0,n);
cout<<bs[u+1]*k+as[u]<<endl;
}
return 0;
}
小田的打字练习
思路
用栈模拟删除,其余全是暴力
代码
#include<bits/stdc++.h>
using namespace std;
string a[10010],b[10010];
int main(){
freopen("key.in","r",stdin);
freopen("key.out","w",stdout);
int cnt=0;
while(1){
string u;
getline(cin,u);
if(u=="EOF"){
break;
}
a[++cnt]=u;
}
cnt=0;
while(1){
vector<char> u;
string st,q;
getline(cin,st);
if(st=="EOF"){
break;
}
for(int i=0;i<st.size();i++){
if(st[i]=='<'){
if(!u.empty()){
u.pop_back();
}
}else{
u.push_back(st[i]);
}
}
for(int i=0;i<u.size();i++){
q.push_back(u[i]);
}
//cout<<endl;
b[++cnt]=q;
}
int kmpw=0;
for(int i=1;i<=cnt;i++){
for(int j=0;j<min(b[i].size(),a[i].size());j++){
if(a[i][j]==b[i][j]){
kmpw++;
//cout<<a[i][j]<<" "<<b[i][j]<<" "<<i<<" "<<j<<endl;
}
//cout<<b[i][j]<<" "<<a[i][j]<<":";
}
}
double t,kmp;
cin>>t;
kmp=kmpw/t*60;
cout<<(int)(kmp+0.5);
return 0;
}
小田想困住奶牛
思路
我们可以模拟奶牛向左冲和向右冲 而且还可以将冲破的草堆给排除掉。
代码
#include<bits/stdc++.h>
using namespace std;
pair<int,int> a[100010];
int main(){
freopen("cow.in","r",stdin);
freopen("cow.out","w",stdout);
int b,n;
cin>>n>>b;
for(int i=1;i<=n;i++){
cin>>a[i].second>>a[i].first;
}
sort(a+1,a+1+n);
if(b>a[n].first||b<a[1].first){
cout<<-1;
return 0;
}
int u=0,q=0;
for(int i=1;i<=n;i++){
if(a[i].first<b&&a[i+1].first>b){
u=i;
q=i+1;
break;
}
}
int l=u,r=q,p=0x3f3f3f3f;
while(l>=1){
while(a[r].first-a[l].first>a[r].second&&r<=n){
r++;
}
if(r>n){
break;
}
p=min(a[r].first-a[l].first-a[l].second,p);
l--;
}
l=u,r=q;
while(r<=n){
while(a[r].first-a[l].first>a[l].second&&l>=1){
l--;
}
if(l<1){
break;
}
p=min(a[r].first-a[l].first-a[r].second,p);
r++;
}
if(p==0x3f3f3f3f){
cout<<-1;
return 0;
}
cout<<max(p,0);
return 0;
}