A:开两个数组s、r,s存容量,r存放了多少。用一个中间值temp来记录当前多出的水,两种情况,一种满了输出s[i],多余的放temp里,另一种没满输出r[i]+temp。AC代码
A:开两个数组s、r,s存容量,r存放了多少。用一个中间值temp来记录当前多出的水,两种情况,一种满了输出 s[ i ],多余的放 temp 里,另一种没满输出 r[ i ] + temp。
AC代码:
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int N=100005;
void sol(){
int n,m;
cin>>n>>m;
ll s[N],r[N];
memset(s,0,sizeof(s));
memset(r,0,sizeof(r));
for(int i=1;i<=n;i++){
cin>>s[i];
}
int x,y;
for(int i=1;i<=m;i++){
cin>>x>>y;
r[x]+=y;
}
ll temp=0;
for(int i=1;i<=n;i++){
if(r[i]+temp>=s[i]){
temp=r[i]+temp-s[i];
cout<<s[i];
}
else{
cout<temp;
temp=0;
}
if(i!=n) cout<<" ";
else cout<<endl;
}
}
int main(){
int t;
cin>>t;
while(t--) sol();
return 0;
}Water
B:先找出40000以内的素数,放在一个数组ve里,并标记40000以内的数组。两遍循环,第二个大于等于第一个数,第三个数就是n-ve[ i ] - ve[ j ],判断第三个数大于第二个且是素数则 ans++。这里的标记用map存超时了,有点迷。(现在懂了,map的每次查询时间要logN,叠加起来就超时了)。
AC代码:
1 #include
2 #include
3 #include
4 #include
5 #include