跑图
#include<bits/stdc++.h>
using namespace std;
const int M = 1e5+1;
struct point{
int x = 0;
int y = 0;
int z = 0;
// int max;
// int end;
}p[M];
bool com(point p1, point p2){
return p1.x < p2.x;
}
struct res{
int end = 0;
int len = 0;
}s[M];
int main(){
int n,m;
cin >> n >> m;
int t, x, y ,z;
for(int i=0;i<m;i++){
cin >> t;
p[t].x = t;
cin >> y >> z;
if(p[t].z < z){
p[t].z = z;
p[t].y = y;
}
}
for(int i=1;i<=n;i++){
if(p[i].x != 0){
// cout <<p[i].x << " " << p[i].y << " " << p[i].z << endl;
cout << p[i].y << " " << p[i].z << endl;
}
else{
cout << 0 << endl;
}
}
return 0;
}
还是跑图
#include<bits/stdc++.h>
// 内部转换与空间顺序
using namespace std;
const int M = 1e5+1;
struct point{
int x;
int y;
int z;
int sum=0;
}p[M];
struct res{
int start;
int end;
}r[M];
bool com2(point p1, point p2){
return p1.x < p2.x;
}
bool com3(res r1, res r2) {
return r1.start < r2.start;
}
int main()
{
int n, m;
cin >> n >> m;
int index;
for(int i=0;i<m;i++){
cin >> p[i].x >> p[i].y >>p[i].z;
index = p[i].x;
p[index].sum++;
}
int max = 0;
int ans = 0;
for(int i=0;i<m;i++){
if(p[i].sum > max){
max = p[i].sum;
ans = i;
}
}
sort(p,p+m, com2);
int j=0;
for(int i=0;i<m;i++){
if(p[i].x == ans){
r[j].start = p[i].y;
r[j].end = p[i].z;
j++;
}
}
sort(r, r+j,com3);
for(int i=1;i<j;i++){
if(r[i-1].start==r[i].start && r[i-1].end > r[i].end) {
int temp = r[i].end;
r[i].end = r[i-1].end;
r[i-1].end = temp;
}
}
// 出边最多的节点
cout << ans << endl;
for(int i=0;i<j;i++){
cout << r[i].start << " " << r[i].end << endl;
}
return 0;
}
双端队列
#include<bits/stdc++.h>
using namespace std;
int main( )
{
deque<int> v;
int m = 0;
cin >> m;
for(int i=0;i<m;i++){
int n =0;
cin >> n;
int x = 0;
if(n==1){
cin >> x;
v.push_front(x);
}
if(n==2){
cin >> x;
v.push_back(x);
}
if(n==3){
cout << v.front() << endl;
}
if(n==4){
cout << v.back() << endl;
}
if(n==5){
v.pop_front();
}
if(n==6){
v.pop_back();
}
}
return 0;
}
找数字2
// 我坦白 这题copy的 才疏学浅 2006年 山东省选 洛谷2454 [SDOI2006]数字串位置
#include<iostream>
#include<fstream>
#include<sstream>
#include<stdlib.h>
#include<string.h>
#include<string>
using namespace std;
const int MAXL=200+50;
const int base=10;
class Bignum{
public:
int size,len; //len limits tostr()'s length
int data[MAXL];
friend ostream& operator<<(ostream& out,Bignum& a);
int& operator[](int x)
{
return data[x];
}
void add(Bignum b)
{
int maxsize=max(size,b.size);
for(int i=0;i<maxsize;i++) data[i]+=b.data[i];
for(int i=0;i<maxsize;i++){
data[i+1]+=data[i]/base;
data[i]%=base;
}
if (data[maxsize]) maxsize++;
size=maxsize;
}
//assume this>b
void minus(Bignum b)
{
for(int i=0;i<size;i++)
{
if(data[i]>=b[i]) data[i]-=b[i];
else
{
data[i]=data[i]+base-b[i];
data[i+1]--;
}
}
while(data[size-1]==0&&size) size--;
}
Bignum operator*(Bignum b)
{
Bignum c("0");
int maxsize=size+b.size-1;
for(int i=0;i<size;i++) for(int j=0;j<b.size;j++) c[i+j]=data[i]*b[j];
for(int i=0;i<maxsize;i++){
c[i+1]+=c[i]/base;
c[i]%=base;
}
while(c[maxsize]){
c[maxsize]+=c[maxsize-1]/base;
c[maxsize-1]%=base;
if(c[maxsize]) maxsize++;
else break;
}
c.size=maxsize;
return c;
}
bool operator==(Bignum& b)
{
if(size!=b.size) return false;
for(int i=0;i<size;i++) if(data[i]!=b[i]) return false;
return true;
}
bool operator<(Bignum& b)
{
if(size!=b.size) return size<b.size;
for(int i=size-1;i>=0;i--) if(data[i]!=b[i]) return data[i]<b[i];
return false;
}
void operator=(Bignum b)
{
size=b.size;
len=b.len;
memset(data,0,sizeof(data));
for(int i=0;i<size;i++) data[i]=b[i];
}
Bignum(string str)
{
size=len=str.size();
memset(data,0,sizeof(data));
for(int i=0;i<size;i++) data[size-i-1]=str[i]-'0';
}
Bignum()
{
size=len=0;
memset(data,0,sizeof(data));
}
string tostr()
{
string s="";
for(int i=len-1;i>=0;i--) s+=(data[i]+'0');
return s;
}
};
ostream& operator<<(ostream& out,Bignum& a)
{
for (int i=a.size-1;i>=0;i--) out<<a.data[i];
return out;
}
int N,firsta=0;
string data;
Bignum ans,final;
string itoa(int a);
bool all9(Bignum& a);
int main()
{
//cin>>data;
cin>>data;
N=data.size();
if (data==string(N,'0')){
data="1"+data;
N++;
firsta=1;
}
final=Bignum(data);
/*2*/
/*i=0?*/
for (int i=1;i<(N+1)/2;i++)
{
if (data[i]=='0') continue;
for (int j=i;j+i<N;j++)
{
Bignum fir=Bignum(data.substr(0,i)),sec=Bignum(data.substr(i,j));
Bignum seclast=Bignum(data.substr(j,i));
fir.add(Bignum("1"));
if (!(fir.tostr()==seclast.tostr())) continue;
Bignum tmpfi=sec;
tmpfi.minus(Bignum("1"));
if (final<tmpfi) continue;
fir=sec;
bool ok=true;
fir.add(Bignum("1"));
int k,nxtwid=fir.size;
/**/
for (k=j+i;k+nxtwid<N;k+=nxtwid)
{
nxtwid=fir.size;
sec=Bignum(data.substr(k,nxtwid));
//cout<<"now ought to be:"<<fir<<" sec is:"<<sec<<endl;
if (!(fir==sec)){
ok=false;break;
}
fir.add(Bignum("1"));
}
if (!ok) continue;
//fir.add(Bignum("1"));
for (int p=fir.size-1;k!=N;k++,p--)
{
if (fir.data[p]!=(data[k]-'0')){
ok=false;break;
}
}
if (!ok) continue;
final=tmpfi;firsta=j-i;
}
}
/*2 over*/
/*3*/
for (int i=1;i<=N-1;i++)
{
if (data[i]=='0') continue;
Bignum tt(data.substr(0,i));
tt.add(Bignum("1"));
string strfir=tt.tostr(),strsec=data.substr(i);
int l;
/*l: pre and suf 's public string*/
for (l=min(i,N-i);l>0;l--)
{
string pre=strfir.substr(0,l),suf=strsec.substr(N-i-l);
if (pre==suf) break;
}
Bignum tmp=Bignum(strsec+strfir.substr(l));
tmp.minus(Bignum("1"));
if (tmp<final){
final=tmp;firsta=strsec.size()-l;
}
}
/*3 over*/
if (all9(final)) firsta--;
if (final.size==1){
//cout<<final<<endl;
cout<<final<<endl;
return 0;
}
/*calculate answer*/
int wid=final.size;
ans=Bignum(string(wid-1,'1'));
Bignum pow("1");
for (int i=0;i<wid-1;i++) pow=pow*Bignum("10");
pow=pow*Bignum(itoa(wid-1));
pow.minus(ans);
ans=pow;
Bignum tmp=final;
tmp.minus(Bignum("1"+string(wid-1,'0')));
tmp=tmp*Bignum(itoa(wid));
tmp.add(Bignum(itoa(firsta)));
tmp.add(Bignum("1"));
ans.add(tmp);
//cout<<ans;
cout<<ans<<endl;
return 0;
}
string itoa(int a)
{
stringstream ss;
ss<<a;
string ret;
ss>>ret;
return ret;
}
bool all9(Bignum& a)
{
for (int i=0;i<a.size;i++)
if (a[i]!=9) return false;
return true;
}