小田的同余

思路

我们反推,可得知,公式如下:

x=(m+1)/2x=(m+1)/2

代码

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

小田喂猫

小田宠物真多

思路

  1. 先排序(数量)
  2. 将前缀和与后缀积计算出来,用于将有和没有这么多猫粮区分出来,再计算
  3. 用二分查找第一个数量小于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;
}