鄙人能力有眼,先附上已AC题目,其他题目会陆续更新
目前更新(6/8)
#include
using namespace std;
struct b
{
int x;
int y;
friend bool operator<(b x,b y)
{
if(x.x!=y.x)
return x.x<y.x;
else
return x.y<y.y;
}
};
int main()
{
int n;
cin >> n;
map<b,int>m;
struct b save;
while(n--)
{
int x,y;
cin >> x >> y;
if(x<0)
{
x=-x;
y=-y;
}
if(x==0&&y<0)
{
y=-y;
}
save.x=x;
save.y=y;
m[save]++;
}
map<b,int>::iterator it;
int flag=0;
for(it=m.begin(); it!=m.end(); it++)
{
if(it->second%2==0)
{
flag+=it->second;
}
}
cout << flag << endl ;
return 0;
}
#include
using namespace std;
int sum[300005];
int main()
{
int n,k;
cin >> n >> k;
int x;
vector<int>ve;
for(int i=1;i<=n;i++)
{
cin >> x;
ve.push_back(x);
if(i==1)
sum[0]=x;
else
sum[i-1]=sum[i-2]+x;
}
//cout << sum[0] << sum[1] << sum[2] << sum[3]<< endl ;
int l=0;
int ans1=0,ans2=0;
int flag=0;
for(int r=0;r<ve.size();r++)
{
//cout << sum[r]-sum[l-1] << endl ;
if(sum[r]-sum[l-1]<k)
continue;
if(sum[r]-sum[l-1]==k)
{
ans1=l+1;
ans2=r+1;
flag=1;
break;
}
else
{
while(sum[r]-sum[l-1]>k)
l++;
if(sum[r]-sum[l-1]<k)
continue;
if(sum[r]-sum[l-1]==k)
{
ans1=l+1;
ans2=r+1;
flag=1;
break;
}
}
}
if(flag)
{
cout << ans1 << " " << ans2 << endl ;
}
else
cout << "tiangeniupi" << endl ;
return 0;
}
#include
using namespace std;
int main()
{
int t;
scanf("%d",&t);
long long x,y;
while(t--)
{
scanf("%lld%lld",&x,&y);
unsigned long long ans;
if(y<9)
ans=0;
else if(y<99)
ans=1;
else if(y<999)
ans=2;
else if(y<9999)
ans=3;
else if(y<99999)
ans=4;
else if(y<999999)
ans=5;
else if(y<9999999)
ans=6;
else if(y<99999999)
ans=7;
else if(y<999999999)
ans=8;
else if(y<9999999999)
ans=9;
else if(y<99999999999)
ans=10;
else if(y<999999999999)
ans=11;
else if(y<9999999999999)
ans=12;
else if(y<99999999999999)
ans=13;
else if(y<999999999999999)
ans=14;
else if(y<9999999999999999)
ans=15;
else if(y<99999999999999999)
ans=16;
else if(y<999999999999999999)
ans=17;
else if(y==1000000000000000000)
ans=18;
printf("%llu\n",ans*x);
}
return 0;
}
#include
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
set<int>s1;
int x;
for(int i=1;i<=n;i++)
{
cin >> x;
s1.insert(x);
}
for(int i=1;i<=m;i++)
{
cin >> x;
if(s1.count(x))
s1.erase(x);
}
if(s1.size())
{
set<int>::iterator it;
for(it=s1.begin();it!=s1.end();it++)
{
cout << *it << endl ;
}
}
else
cout << "So crazy!!!" << endl ;
return 0;
}
方法一:vector
#include
using namespace std;
int k,n;
vector<int>save;
int check(int x)
{
vector<int>ve;
ve=save;
int sum=0;
int flag=1;
while(ve.size())
{
if(sum+*ve.begin()<=x)
{
sum+=*ve.begin();
ve.erase(ve.begin());
continue;
}
else
{
if(sum+*ve.rbegin()>x)
{
flag++;
sum=*ve.begin();
ve.erase(ve.begin());
}
else
{
vector<int>::iterator it;
reverse(ve.begin(),ve.end());
it=upper_bound(ve.begin(),ve.end(),x-sum);
it--;
sum+=*it;
ve.erase(it);
reverse(ve.begin(),ve.end());
}
}
if(flag>k)
return 0;
}
return 1;
}
int main()
{
int T;
scanf("%d",&T);
int u=1;
while(u<=T)
{
save.clear();
scanf("%d%d",&n,&k);
int i,sum=0;
int x;
for(i=1; i<=n; i++)
{
scanf("%d",&x);
save.push_back(x);
sum+=x;
}
sort(save.begin(),save.end(),greater<int>());
int ans=sum/k;
while(!check(ans))
{
ans++;
}
printf("Case #%d: %d\n",u,ans);
u++;
}
return 0;
}
方法二:数组标记
#include
using namespace std;
int k,n;
int save[1005];
int check(int x)
{
bool a[1005]={0};
int vis=0;
for(int i=1;i<=k;i++)
{
int sum=0;
for(int j=1;j<=n;j++)
{
if(sum+save[j]<=x&&a[j]==0)
{
sum+=save[j];
a[j]=1;
vis++;
}
if(vis==n)
return 1;
}
}
return 0;
}
int main()
{
int T;
scanf("%d",&T);
int u=1;
while(u<=T)
{
memset(save,0,sizeof(save));
scanf("%d%d",&n,&k);
int i,maxx=0;
int x;
int sum=0;
for(i=1; i<=n; i++)
{
scanf("%d",&x);
save[i]=x;
sum+=x;
}
sort(save+1,save+1+n,greater<int>());
int ans=sum/k;
while(!check(ans))
{
ans++;
}
printf("Case #%d: %d\n",u,ans);
u++;
}
return 0;
}
#include
using namespace std;
int main()
{
int n;
scanf("%d",&n);
long long flag=0;
int x1,x2,ry1,y2;
map<double,int>visk;
map<pair<double,double>,int>viskb;
for(int i=1; i<=n; i++)
{
scanf("%d%d%d%d",&x1,&ry1,&x2,&y2);
double k;
double b;
if(x1==x2)
k=10000000000;//用它来表示垂直于x轴的斜率
else
k=(y2-ry1)*1.0/(x2-x1);
if(x1!=x2)
b=ry1-k*x1;
else
b=x1;//垂直x轴的时候用b来记录x的值
flag+=(i-1-visk[k]);//之前输入的一共有多少斜率不同的,直接加上
flag+=viskb[{k,b}];//斜率相同且b也相同的也直接加上
visk[k]++;
viskb[{k,b}]++;
}
printf("%lld\n",flag);
return 0;
}