P2671 [NOIP2015 普及组] 求和
1.题意:
2.题解:
程序写推导式很复杂
经历了,
ans没有(ans+score)%mod,全错
s,num一维数组开的不够大,有部分数据re
3.ac代码:
#include<stdio.h>
#include<bits/stdc++.h>
#include<iostream>
#include<string.h>
#define N 100001
#define mod 10007
#include<string>
using namespace std;
int n,m;
int num[N],color[N];
int s[N][3],sum[N][3];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>num[i];
for(int i=1;i<=n;i++){
cin>>color[i];
s[color[i]][i%2]++;//计数每种颜色的奇偶分别共有多少个
sum[color[i]][i%2]=(sum[color[i]][i%2]+num[i])%mod;
}
int ans=0;
int score=0;
for(int i=1;i<=n;i++){
score=i*(sum[color[i]][i%2]+((s[color[i]][i%2]-2)*num[i])%mod)%mod;
ans=(ans+score)%mod;
}
cout<<ans<<endl;
}
跳石头
1.题意:
2.题解:
论一个好的二分模板的重要性
int erfen(int l,int r){
//>=x的最小,在左找左端点
while(l<r){
int mid=(l+r)>>1;
if(check(mid)>=x)
r=mid;
else
l=mid+1;
}
return l;
}
int erfen(int l,int r){
//<=x的最大 ,在右找左端点
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid)<=x)
l=mid;
else
r=mid-1;
}
return l;
}
3.ac代码:
#include<stdio.h>
#include<bits/stdc++.h>
#include<iostream>
#include<string.h>
#define N 100001
#define mod 10007
#include<string>
using namespace std;
int s,n,m;
int l,r;
int rock[N];
int check(int x){
int t=0;
int pre=0;
for(int i=1;i<=n+1;i++){
if(rock[i]-pre<x){
t++;
}else{
pre=rock[i];
}
}
return t;
}
int erfen(int l,int r){
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid)<=m)
l=mid;
else
r=mid-1;
}
return l;
}
int main(){
cin>>s>>n>>m;
rock[0]=0;
int i;
for( i=1;i<=n;i++){
cin>>rock[i];
}
rock[i]=s;
int out=erfen(0,s);
cout<<out<<endl;
}
变大写
1.题意:
2.题解:
toupper函数
写了好几道都没写出来,明天再战
3.ac代码:
#include<stdio.h>
#include<bits/stdc++.h>
#define N 2000
using namespace std;
string s;
int main(){
cin>>s;
int n=s.length();
for(int i=0;i<n;i++){
s[i]=toupper(s[i]);
}
cout<<s<<endl;
}