1
#include<iostream>
using namespace std;
int ans,n;
int main(){
cin>>n;
while(n){
ans+=n%10;
n/=10;
}
cout<<ans<<endl;
}
2
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int mp[35][35];
bool eliminate[35][35];
int main(){
cin>>n>>m;
memset(eliminate,false,sizeof eliminate);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>mp[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i>=2&&mp[i][j]==mp[i-1][j]&&mp[i][j]==mp[i-2][j]){
eliminate[i][j]=true;
eliminate[i-1][j]=true;
eliminate[i-2][j]=true;
}
if(i<=n-3&&mp[i][j]==mp[i+1][j]&&mp[i][j]==mp[i+2][j]){
eliminate[i][j]=true;
eliminate[i+1][j]=true;
eliminate[i+2][j]=true;
}
if(j>=2&&mp[i][j]==mp[i][j-1]&&mp[i][j]==mp[i][j-2]){
eliminate[i][j]=true;
eliminate[i][j-1]=true;
eliminate[i][j-2]=true;
}
if(j<=m-3&&mp[i][j]==mp[i][j+1]&&mp[i][j]==mp[i][j+2]){
eliminate[i][j]=true;
eliminate[i][j+1]=true;
eliminate[i][j+2]=true;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(eliminate[i][j]){
cout<<0<<" ";
}
else{
cout<<mp[i][j]<<" ";
}
}
cout<<endl;
}
}
4(欧拉通路)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stack>
using namespace std;
const int maxm=2000010,maxn=10010;
int n,m,deg[maxn];
bool used[10010][10010],vis[maxn];
vector<int> edge[maxn];
stack<int> path;
bool eularcheck(){
int odd=0;
for(int i=1;i<=n;i++){
if(deg[i]%2==1){
odd++;
}
}
if(odd==0||odd==2){
return true;
}
return false;
}
void dfs(int x){
vis[x]=true;
for(int i=0;i<edge[x].size();i++){
if(!used[x][edge[x][i]]){
used[x][edge[x][i]]=true;
used[edge[x][i]][x]=true;
dfs(edge[x][i]);
path.push(edge[x][i]);
}
}
}
int main(){
memset(used,false,sizeof used);
memset(vis,false,sizeof vis);
cin>>n>>m;
int a,b;
for(int i=1;i<=m;i++){
cin>>a>>b;
edge[a].push_back(b);
edge[b].push_back(a);
deg[a]++;deg[b]++;
}
if(!eularcheck()){
cout<<-1<<endl;return 0;
}
for(int i=1;i<=n;i++){
sort(edge[i].begin(),edge[i].end());
}
dfs(1);
for(int i=2;i<=n;i++){
if(!vis[2]){
cout<<-1<<endl;
return 0;
}
}
path.push(1);
while(path.size()){
cout<<path.top()<<" ";
path.pop();
}
}
5(矩阵快速幂,50pts)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=200;
int n,m,A[N][N],B[N];
struct Matrix{
int x[N][N];
Matrix operator*(const Matrix & t) const {
Matrix ret;
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
ret.x[i][j]=0;
for(int k=0;k<m;k++){
ret.x[i][j]^=x[i][k]&t.x[k][j];
}
}
}
return ret;
}
Matrix(){
memset(x,0,sizeof x);
}
Matrix(const Matrix &t){
memcpy(x,t.x,sizeof x);
}
};
Matrix quick_pow(Matrix a,int x){
Matrix ret;
for(int i=0;i<m;i++){
ret.x[i][i]=1;
}
while(x){
if(x&1) ret=ret*a;
a=a*a;
x>>=1;
}
return ret;
}
int main(){
cin>>m;cin.get();
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
A[i][j]=cin.get()-'0';
}
cin.get();
}
for(int i=0;i<m;i++){
B[i]=cin.get()-'0';
}
cin>>n;
while(n--){
int k;cin>>k;
if(k==0){
for(int i=0;i<m;i++){
cout<<B[i];
}
cout<<endl;
continue;
}
Matrix trans;
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
trans.x[i][j]=A[i][j];
}
}
trans=quick_pow(trans,k);
for(int i=0;i<m;i++){
int temp=0;
for(int k=0;k<m;k++){
temp^=trans.x[i][k]&B[k];
}
cout<<temp;
}
cout<<endl;
}
}