先写我会的吧
待补。
题意:就是给你一个n和c,然后在n个不超过c的数字里面找一个最长的序列,满足序列奇数位数字相同,偶数位数字相同,并且奇数位数字和偶数位数字不一样。
思路:暴力枚举c范围内的数字。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
struct node{
int i,x;
};
const int N=1e5+100;
vector<node>vt[N];
int ans[N];
bool cmp(node a,node b)
{
return a.i<b.i;
}
int main()
{
ios::sync_with_stdio(0);
int anss=0;
int n,k,a[N];cin>>n>>k;
cin>>a[1];
vt[a[1]].push_back({1,a[1]});
int j=2;
for(int i=2;i<=n;i++){
cin>>a[j];
if(a[j]==a[j-1])continue;
vt[a[j]].push_back({j,a[j]});
j++;
}
int p=0;
for(int i=1;i<=k;i++){
for(int j=i+1;j<=k;j++){
if(vt[i].size()==0||vt[j].size()==0)continue;
int w=vt[i].size(),ww=vt[j].size();
vector<node>VT;
for(int ii=0;ii<w;ii++)VT.push_back(vt[i][ii]);
for(int ii=0;ii<ww;ii++)VT.push_back(vt[j][ii]);
sort(VT.begin(),VT.end(),cmp);
int cnt=1,now=VT[0].x;
for(int i=1;i<w+ww;i++){
if(VT[i].x!=now){
cnt++;
now=VT[i].x;
}
}
for(int kk=0;kk<w+ww;kk++)
anss=max(anss,cnt);
}
}
cout<<anss<<endl;
return 0;
}
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
struct node{
int i,x;
};
const int N=1e5+100;
vector<node>vt[N];
int ans[N];
bool cmp(node a,node b)
{
return a.i<b.i;
}
int main()
{
ios::sync_with_stdio(0);
int anss=0;
int n,k,a[N];cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
vt[a[i]].push_back({i,a[i]});
}
int p=0;
for(int i=1;i<=k;i++){
for(int j=i+1;j<=k;j++){
if(vt[i].size()==0||vt[j].size()==0)continue;
int w=vt[i].size(),ww=vt[j].size();
vector<node>VT;
for(int ii=0;ii<w;ii++)VT.push_back(vt[i][ii]);
for(int ii=0;ii<ww;ii++)VT.push_back(vt[j][ii]);
sort(VT.begin(),VT.end(),cmp);
int cnt=1,now=VT[0].x;
for(int ii=1;ii<w+ww;ii++){
if(VT[ii].x!=now){
cnt++;
now=VT[ii].x;
}
}
for(int kk=0;kk<w+ww;kk++)
anss=max(anss,cnt);
}
}
cout<<anss<<endl;
return 0;
}
题意:给你一个字符串,再给你的这个字符串里面随机取出四个字符,问可以组成avin的概率。
思路:每一个的概率就是 该字符的个数/字符串总长度。然后相乘一下,记得约分一下就好。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=1e4;
int main()
{
int N;
string s;
while(cin>>N)
{
int a=0,v=0,ii=0,n=0;
cin>>s;
for(int i=0;i<N;i++){
if(s[i]=='a')a++;
if(s[i]=='v')v++;
if(s[i]=='i')ii++;
if(s[i]=='n')n++;
}
ll ans=a*v*ii*n;
if(ans==0)puts("0/1");
else{
ll anss=N*N*N*N;
ll g=__gcd(ans,anss);
ans=ans/g;anss=anss/g;
cout<<ans<<"/"<<anss<<endl;
}
}
return 0;
}
题意:东西有车辆要经过,南北也有车辆要经过,为了防止他们相撞,南北经过的汽车总是要等待东西方向的车辆经过以后在通过,问最短需要等待多长时间。
思路:因为数据的范围很小,所以直接暴力从0枚举就行了。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=1e4;
int a[N],b[N];
int main()
{
int n,m,s;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
cin>>s;
a[s]++;
}
for(int i=0;i<m;i++){
cin>>b[i];
}
sort(b,b+m);
int ans=0;
while(1)
{
int f=0;
for(int i=0;i<m;i++){
if(a[b[i]+ans]){
f=1;
break;
}
}
if(f)ans++;
else{
cout<<ans<<endl;
break;
}
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
long long qp(long long a,long long b){
long long ans=1;
while(b){
if(b&1){
ans=(ans%mod*a%mod)%mod;
}
a=(a%mod*a%mod)%mod;
b>>=1;
}
return ans;
}
int main(){
int n;
while(cin>>n){
cout<<((n+1)%mod*qp(2*n,mod-2)%mod)%mod<<endl;
}
return 0;
}
题意:给你n个有三位小数的数字,如果将它保留两位小数,会比着原来的数有所增加或者减少或者不变,问你这n个数一共变化了多少?
思路:判断最后一位是否大于5,然后暴力计算就行了。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=1e4;
//long double s;
string s;
int main()
{
int n;
while(cin>>n){
ll ans=0;
for(int i=0;i<n;i++){
cin>>s;
int m=s.size();
if(s[m-1]>='5'){
ans=ans+10-s[m-1]+'0';
}else {
ans=ans-s[m-1]+'0';
}
}
double qq=ans;
qq=qq/1000;
printf("%.3f\n",qq);
}
return 0;
}
题意:给你n个仓库,然后告诉你每个仓库每人可以处理多少个订单,然后给你m个工人,问你怎么分配可以使每个仓库的效率一样高,输出Yes,并输出每个仓库的人数,如果不能满足上面要求的话,就输出No。
思路:lcm。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll N=1e4;
ll a[N];
ll lcmm(ll a,ll b)
{
return (a*b)/__gcd(a,b);
}
int main()
{
ll n,m;
while(cin>>n>>m)
{
ll lcm=1;
for(ll i=0;i<n;i++){
cin>>a[i];
lcm=lcmm(lcm,a[i]);
}
ll ans=0;
for(ll i=0;i<n;i++){
a[i]=lcm/a[i];
ans+=a[i];
}
if(m%ans==0&&ans<=m){
puts("Yes");
ll p=m/ans;
printf("%lld",p*a[0]);
for(ll i=1;i<n;i++) printf(" %lld",p*a[i]);
puts("");
}else puts("No");
}
return 0;
}
温暖的签到题。。。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
int main()
{
int a,b;
cin>>a>>b;
int s=(a-b)/2;
int u=(a+b)/2;
cout<<s*u<<endl;
return 0;
}